use*_*ser 7 c++ iterator c++11
在第二个到最后一个元素之后执行循环并停止的最优雅方式是什么(在C++ 11中)?
注意:我的意思是双向迭代器; 随机访问迭代器是一个微不足道的特例,当然,因为它们有+
和-
运算符.
std::list<double> x{1,2,3,4,5,6};
for (auto iter = x.begin(); iter != x.end(); ++iter) {
auto iter2 = iter;
++iter2;
if (iter2 == x.end()) break;
std::cout << *iter << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
R. *_*des 14
使用std::prev
功能:
std::list<double> x{1,2,3,4,5,6};
for (auto iter = x.begin(); iter != std::prev(x.end()); ++iter) {
std::cout << *iter << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
在C++ 03中它应该是:
for (std::list<double>::iterator it = x.begin(), it_last = --x.end();
it != it_last; ++it)
{
std::cout << *it << '\n';
}
Run Code Online (Sandbox Code Playgroud)
在C++ 11中,没有什么根本不同,它只是不那么冗长..:
for (auto it = begin(x), it_last = --end(x); it != it_last; ++it)
{
std::cout << *it << '\n';
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1542 次 |
最近记录: |