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
YesC++ 让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()的内容,因
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());
| ~~~~~~~^~