为什么迭代器操作符+返回副本?

dtg*_*gee 3 c++ iterator

如果你有一个迭代器vector<int>::iterator i = vector.begin(),i++则将实际的迭代器向下移动.但为什么会这样呢

i = i + 3

给你一个新的迭代器三个门?

Jos*_*eld 5

模仿人们期望的自然行为+.与以下相同的方式:

int x = 0;
int y = x + 3;
Run Code Online (Sandbox Code Playgroud)

第二行不会改变x,它只是评估值为3.但是,x++ 修改x.

如果你想推进一个通用的迭代器,你应该使用std::advance(i, 3)(它将i += 3在随机访问迭代器上执行,而i++在任何其他迭代器上执行三次).