2

C++のベクターから要素を削除しようとしています。以下のコードでは、Vectorの数値のリストから10より大きい要素を削除しています。ネストされたループを使用して削除を行っています。同じことをするためのより良いまたはより簡単な方法はありますか?

// removing an element from vector preserving order
#include <iostream>
#include <vector>
using namespace std;
int main() {
    vector<int> v {3,2,9,82,2,5,4,3,4,6};
    for (int i=0; i < v.size(); i++) {
        if (v[i] > 10) { // remove element > 10
            while (i < v.size()) {
                v[i] = v[i+1];
                i ++;
            }
        }
    }
    v.pop_back();
    for (int i=0; i < v.size(); i++) {
        cout << v[i] << "|";
    }
    return 0;
}
4

1 に答える 1

3

std::remove_ifを確認することをお勧めします

bool is_higher_than_10(int i) { return i > 10; }
std::remove_if(v.begin(), v.end(), is_higher_than_10);

そして、学ぶべきことは常にたくさんあるので、クリスとベンジャミン・リンドリーのコメントと消去-削除のイディオムを見てください(みんなに感謝します)

v.erase(std::remove_if(v.begin(), v.end(), is_higher_than_10), v.end());
于 2013-03-22T04:15:06.207 に答える