0

std::vector があり、コードのある時点で MyClass オブジェクトのインスタンスを追加した場合、後でその特定のオブジェクトをベクターから削除するにはどうすればよいですか?

(SOでintを削除する方法を説明する質問を見つけましたが、それらは原始的であり、同じ手法がユーザー定義のクラスで機能するかどうかわかりません)

std::vector<MyClass> v;
MyClass m;
v.push_back(m);
.
.
.
//Wish to remove m from v??

編集: ベクトル内の m の位置がわからない。

4

3 に答える 3

2

それがまだ最後の要素であることがわかっている場合:

v.pop_back();

そうしないと

auto it=std::find(begin(v),end(v),m);
if(it!=end(v)) v.erase(it);

コピーctorを介してpush_back重複することに注意してください。それを呼び出すコードと同じではなく、同じ値を持っているだけです(Javaセマンティクスとは異なります)。mmpush_back

編集:

op==そのop<ように実装できます。

struct s {
    std::string name;
    int id;
};

bool operator==(const s& l, const s& r) {
    return l.id   == r.id
    &&     l.name == r.name
    ;
}

bool operator<(const s& l, const s& r) {
     return std::make_tuple(l.id, l.name)
     <      std::make_tuple(r.id, r.name)
     ;
}
于 2013-11-14T21:16:21.313 に答える
0

C++11:

std::vector<int> v = {1,2,3,4,5};
auto end = std::remove(v.begin(), v.end(), 3);
v.resize(end - v.begin());
于 2013-11-14T21:52:08.060 に答える