遍历列表容器,排除最后一个元素

sur*_*h m 3 c++ c++11 c++14

我需要遍历一个std::list直到end() - 1(所以我不希望在遍历时包含最后一个元素).有效的方法是什么?

#include <iostream>
#include <list>
using namespace std;

int main()
{
    list<int> l{1,2,3,4,5};

    for(auto itr = l.begin(); itr != l.end() - 1; ++itr)
    {   
        cout << *itr << '\n';
    }   
}
Run Code Online (Sandbox Code Playgroud)

R S*_*ahu 6

std::list::iterator是一个BidirectionalIterator.您可以使用它std::prev来获取需要停止的迭代器.

for(auto itr = l.begin(), end = std::prev(l.end()); itr != end; ++itr)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

请参阅https://ideone.com/26lJSC.

  • 我认为最好将变量`end`移动到for循环来定义它.就像`for(auto itr = l.begin(),end = prev(l.end()); itr!= end; ++ ITR)` (3认同)