c ++:使用迭代器调用vector :: erase

时间:2012-04-17 14:15:47

标签: c++ vector struct iterator erase

我正在研究结构的向量。

当我尝试使用迭代器调用此函数时,如下所示:

vec2.erase (vec2.begin()+iter2);

它向我发送了这个错误:

"no match for 'operator+' in '(+vec2)->std::vector<_Tp, _Alloc>::begin [with _Tp = wordstype, _Alloc = std::allocator<wordstype>]() + iter2'" 

我可以发送迭代器(或任何其他参数)吗? 如果是,问题是什么?

4 个答案:

答案 0 :(得分:3)

您无法添加iterator to iterator

iter2已经指向向量中的具体位置,因此您可以写:

iter2 = vec2.erase(iter2);

代替。

答案 1 :(得分:2)

erase可以使用迭代器,代码如下:

erase(itr2);

你也可以这样做:

erase(vec2.begin() + 3);

然而,迭代器不会声明operator+,因此您的呼叫无效。

答案 2 :(得分:0)

您正在尝试将两个迭代器相加,这没有任何意义。

发布您的代码并解释您的目标。

答案 3 :(得分:0)

根据错误消息,您描述的问题似乎与std::vector<>::erase没有任何关系。

编译器遇到问题的表达式为vec2.begin() + iter2。显然,在你的情况下iter2是一个迭代器。 vec2.begin()也是一个迭代器。您不能将一个迭代器添加到另一个迭代器。这根本没有意义。因此错误。

vec2.begin() + iter2你想做什么?如果iter2确实是迭代器,为什么要尝试将其添加到vec2.begin()