【发布时间】:2017-09-24 01:24:35
【问题描述】:
我有一个来自 std::list<std::string> 的迭代器,但是当我尝试使用 += 推进它时,出现编译错误。
代码是:
#include <list>
#include <iostream>
#include <string>
int main() {
std::list<std::string> x;
x.push_front("British");
x.push_back("character");
x.push_front("Coding is unco");
x.push_back("Society");
x.push_back("City Hole");
auto iter = x.begin();
iter += 3;
//std::advance(iter, 3);
x.erase(iter);
for (auto &e: x) {
std::cout << e << "\n";
}
}
如果我使用 clang++ -std=c++11 -o li li.cpp 编译它,我会得到:
li.cpp:13:10: error: no viable overloaded '+='
iter += 3;
~~~~ ^ ~
1 error generated.
为什么我不能在这个迭代器中使用+=?
【问题讨论】:
-
@EdChum 更准确地说,您不能像这样增加列表迭代器。 (+ Op 知道提前,在评论中)
-
iter += 3表示iter = iter + 3,你不能这样做。 -
假设错误信息相当清楚我不太明白问题是什么
-
@Mudi -- 没有。
iter += 3表示“调用重载运算符+=”。与数字类型不同,它与+没有内在联系。 -
@PeteBecker 同意!
标签: c++ c++11 iterator stdlist