-2

重複の可能性:
c++ std::vector からすべてのアイテムを削除する

イテレータでbeginを使用すると、26回しか繰り返されず、2要素ごとにスキップされるため、これが台無しになると思います。他にどうすればいいですか?

void clearVector() {
    for (int i = 0; i < 52; i++) {
        vector.erase(vector.begin() + i);
    }
}
4

4 に答える 4

22

std::vector::clear()メソッドを呼び出します。

myVector.clear();

インスタンス名を からvectorに変更しましたmyVector。インスタンスにクラスの名前を使用することはお勧めできません。

于 2012-11-30T06:39:40.473 に答える
12

std::vectorメンバーがいclearます。

void clearVector() {
    vector.clear();
}

とにかく、左から消しているので、サイズも縮小します。これは意図したとおりに機能しますが、反復ごとに O(N) 個のコピーを前面に向かって行う必要があるため、非効率的です。

void clearVector() {
    for (int i = 0; i < 52; i++) {
        vector.erase(vector.begin());
    }
}
于 2012-11-30T06:39:44.230 に答える
3

std::vector::clear() を使用して要素をクリアするか、空のコンテナーと交換する方がはるかに高速です。

vec.clear(); 

また

std::vector<DataType>().swap(vec);

注: あなたの変数vectorは適切な変数名ではありません。別の名前に変更することをお勧めします。

于 2012-11-30T06:45:51.110 に答える
2
      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();

したがって、繰り返す必要はありません。

于 2012-11-30T06:44:48.820 に答える