C++ 让iter成为std::迭代器。std::next(iter,1)和++;iter? 请考虑以下代码: #include <iostream> #include <iterator> #include <vector> int main() { std::vector<int> v{1,2,3}; // implementation 1: for(auto iter = v.begin(); iter !=v.end(); ++iter) std::cout << *iter; std::cout << std::endl; // implementation 2: for(auto iter = v.begin(); iter !=v.end(); iter = std::next(iter, 1)) std::cout << *iter; std::cout << std::endl; } #包括 #包括 #包括 int main() { std::向量v{1,2,3}; //实施1: 对于(自动iter=v.begin();iter!=v.end();++iter) std::cout

C++ 让iter成为std::迭代器。std::next(iter,1)和++;iter? 请考虑以下代码: #include <iostream> #include <iterator> #include <vector> int main() { std::vector<int> v{1,2,3}; // implementation 1: for(auto iter = v.begin(); iter !=v.end(); ++iter) std::cout << *iter; std::cout << std::endl; // implementation 2: for(auto iter = v.begin(); iter !=v.end(); iter = std::next(iter, 1)) std::cout << *iter; std::cout << std::endl; } #包括 #包括 #包括 int main() { std::向量v{1,2,3}; //实施1: 对于(自动iter=v.begin();iter!=v.end();++iter) std::cout,c++,iterator,C++,Iterator,Yesiter=std::next(iter,1)相当于++iter 我能想到的std::next(iter,1)和++iter之间的唯一区别是std::next不修改迭代器,它返回结果迭代器的副本 另外,std::next在泛型上下文中非常有用,iterator可以是random access,forward等。它将使用最合适的方式推进迭代器。在您的代码中没有区别。两者都将使迭代器前进一步 举一个可能重要的例子,假设我们要打印范围的第二个元素,我们不能编写类似于++b.begin()的内容,因

Yes
iter=std::next(iter,1)
相当于
++iter

我能想到的
std::next(iter,1)
++iter
之间的唯一区别是
std::next
不修改迭代器,它返回结果迭代器的副本


另外,
std::next
在泛型上下文中非常有用,
iterator
可以是
random access
forward
等。它将使用最合适的方式推进迭代器。

在您的代码中没有区别。两者都将使迭代器前进一步

举一个可能重要的例子,假设我们要打印范围的第二个元素,我们不能编写类似于
++b.begin()
的内容,因为我们不能将
++
应用于右值

下面是一个代码示例

#include <array>
#include <iostream>

int main()
{
    std::array<int, 2> a = {2, 4};

    //std::cout << *(++a.begin()); // This will fail
    std::cout << *std::next(a.begin());
}

#include

一些迭代器可能不支持
++
,但仍然可以使用
std::next
std::advance
@JesperJuhl,我认为所有迭代器都必须支持
++
,这不是真的吗?它不一定会在右值上工作。
prog.cc: In function 'int main()':
prog.cc:8:29: error: lvalue required as increment operand
    8 |     std::cout << *(++a.begin());
      |                      ~~~~~~~^~