2

我正在研究结构向量。

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

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

4 回答 4

3

您不能将迭代器添加到迭代器

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

iter2 = vec2.erase(iter2);

反而。

于 2012-04-17T14:17:21.200 回答
2

Yeserase可以使用迭代器,代码如下所示:

erase(itr2);

你也可以这样做:

erase(vec2.begin() + 3);

但是迭代器没有声明operator+,因此您的调用无效。

于 2012-04-17T14:17:43.683 回答
0

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

发布您的代码并解释您正在尝试做什么。

于 2012-04-17T14:18:12.013 回答
0

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

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

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

于 2012-04-17T14:20:24.730 回答