我有一个std::list<int>
和一个std::vector<int>
。我想从中删除偶数元素,并在其中复制奇数元素。
我对它们都有两个不同的功能:
向量:
std::vector<int> vec_remove_even_duplicate_odd(std::vector<int> target) {
std::vector<int>::iterator begin = target.begin();
while (begin != target.end()) {
if (*begin % 2 == 0) {
begin = target.erase(begin);
} else {
begin = target.insert(begin, *begin);
begin += 2;
}
}
return target;
}
这工作正常。但是相同的函数std::list<int>
在该行显示错误begin += 2
:
error: no match for ‘operator+=’ (operand types are ‘std::list<int>::iterator {aka std::_List_iterator<int>}’ and ‘int’)
如果我将其更改为:
begin = begin + 2
它显示以下注释:
note: mismatched types ‘const std::reverse_iterator<_Iterator>’ and ‘int’
但是,如果我将该行更改为:
++begin;
++begin;
它也可以正常工作list
。那么这种行为是什么,我在阅读容器时可能会错过。
为什么+=
没有为 定义运算符std::list<T>::iterator
?以及为什么简单+
操作员的消息?我什至没有创建一个reverse_iterator
?
我知道 avector
是一个连续的结构,而 alist
不是。但是,考虑到后增量是适用的,这有什么关系呢?这个问题是list
唯一的,还是其他一些容器也有这个问题?