[解決済み】このベクトルイテレータはなぜインクリメント可能ではないのですか?
2022-01-28 15:42:12
質問
ベクターの内容を削除しようとすると、vector iterator is not incrementable というエラーが出ますが、なぜでしょうか?
これは私のデストラクタです。
City::~City()
{
vector <Base*>::iterator deleteIterator;
for (deleteIterator = m_basesVector.begin() ; deleteIterator != m_basesVector.end() ; deleteIterator++)
m_basesVector.erase(deleteIterator);
}
ありがとうございます。
どのように解決するのですか?
erase
はイテレータを無効にします。これ以上使えません。幸運なことに、これは使えるイテレータを返します。
vector <Base*>::iterator deleteIterator = m_basesVector.begin();
while (deleteIterator != m_basesVector.end()) {
deleteIterator = m_basesVector.erase(deleteIterator);
}
または
m_basesVector.clear();
ベクター内のポインターから参照されるメモリの解放はあなたの責任ですか?もしそれが反復処理をしている理由なら(そしてあなたの実際のプログラムには、あなたが見せていない、ループ内でそれらのオブジェクトを解放するコードがもっとあります)、ベクトルの先頭から消去するのは遅い処理であることに留意してください。なぜなら各ステップで、ベクトルのすべての要素を1つ下にシフトしなければならないからです。それよりも、ベクターの上でループしてすべてを解放する方がよいでしょう (その場合
clear()
Mikeが言うように、ベクターが破壊されるオブジェクトのメンバーであればその必要はないのですが)。
関連
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み] C++で仮想関数が必要な理由とは?
-
[解決済み] std::vectorのイテレータのインデックスを取得する最も効果的な方法は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された