重複の可能性:
c++ std::vector からすべてのアイテムを削除する
イテレータでbeginを使用すると、26回しか繰り返されず、2要素ごとにスキップされるため、これが台無しになると思います。他にどうすればいいですか?
void clearVector() {
for (int i = 0; i < 52; i++) {
vector.erase(vector.begin() + i);
}
}
重複の可能性:
c++ std::vector からすべてのアイテムを削除する
イテレータでbeginを使用すると、26回しか繰り返されず、2要素ごとにスキップされるため、これが台無しになると思います。他にどうすればいいですか?
void clearVector() {
for (int i = 0; i < 52; i++) {
vector.erase(vector.begin() + i);
}
}
std::vector::clear()
メソッドを呼び出します。
myVector.clear();
インスタンス名を からvector
に変更しましたmyVector
。インスタンスにクラスの名前を使用することはお勧めできません。
std::vector
メンバーがいclear
ます。
void clearVector() {
vector.clear();
}
とにかく、左から消しているので、サイズも縮小します。これは意図したとおりに機能しますが、反復ごとに O(N) 個のコピーを前面に向かって行う必要があるため、非効率的です。
void clearVector() {
for (int i = 0; i < 52; i++) {
vector.erase(vector.begin());
}
}
std::vector::clear() を使用して要素をクリアするか、空のコンテナーと交換する方がはるかに高速です。
vec.clear();
また
std::vector<DataType>().swap(vec);
注: あなたの変数vector
は適切な変数名ではありません。別の名前に変更することをお勧めします。
vec.erase(vec.begin() /* first you want delete */,
vec.begin() + vec.size() /* 1 beyond the last you want to delete */);
// or if you have to erase all elements:
vec.clear();
したがって、繰り返す必要はありません。