stl list 中如何取得指定位置的值?比如倒数第三个。我按照一定规律把很多的结构数据存入list,现在想按原有的顺序获取最后的n个,如何做?因为我发现,不能用下标,也很难取得固定位置的iterator,请高手指点。

解决方案 »

  1.   

    仅仅取最后几个的话可以用下面的方法:
    int i = 0;
    for( i = 0; i < n && !list.empty(); i++ )
    {
        ... = list.back();    // 每次取最后一个  从而得到最后n个数
    }// 得到第n个数
    if( n > list.size() )
      return;list<T>::iterator it;
    i = 0;
    for( it = list.begin(); it != list.end(); it++ )
    {
        i++;
        if( n == i )
            break;
    }
    ... = *it;   // 得第n个数好像list 没有重载[]操作符。
      

  2.   

    list不提供随机访问,所以不能用下标直接访问到某个位置的元素,要访问list里的元素只能遍历,不过你要是只需要访问list的最后N个元素的话,可以用反向迭代器来遍历:std::list<int> l;
    l.push_back(1);
    l.push_back(2);
    l.push_back(3);for (std::list<int>::reverse_iterator it = l.rbegin();
    it != l.rend(); ++it)
    {
    std::cout << *it << std::endl;
    }或者改用vector,vector可以直接用下标访问到任意元素。
      

  3.   

    看例子
    #include <iostream>
    #include <list>
    #include <algorithm>
    using namespace std;int main()
    {
    list<int> l;
    for(int i=0;i<10;i++)
    l.push_back(i);
    list<int>::iterator i = l.end();
    advance( i , -3 );
    cout<<*i<<endl;
        return 0;
    }
      

  4.   

    你要随机存取的话,换个容器吧,vector挺好用,