c ++列出问题

时间:2010-05-07 02:17:42

标签: c++ data-structures

我想把列表前面的值放到另一个列表中但是我收到错误。

为exmaple

List<int> li;
List<int> li2;

.............
.............

li2.push_back(li.front()); // this statement doesnt work for me. 

有人可以帮帮我吗。

示例代码:

   list<int> li;
   list<int> li2;
   li.push_back(1);
   li.push_back(2);
   li.push_back(3);

   for(int i=0;i<3;i++)
   {

    cout<<li.front()<<endl;
    li2.push_back(li.pop_front());

   }

3 个答案:

答案 0 :(得分:8)

pop_front()只删除列表中的第一个元素。它不会返回元素。

您需要致电front()以获取元素,然后调用pop_front()将其从列表中删除:

li2.push_back(li.front());
li.pop_front();

答案 1 :(得分:4)

另外,请注意,当列表为空时,pop_front()和pop_back()将抛出异常 - 导致分段错误。因此必须检查列表的大小
一世。直接 - 使用列表功能
ii。直接使用程序中显示的for循环。

示例代码

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


int main( int argc, char *argv[])
{

    list<int> li;
    li.pop_front();

    return 0;
}

输出继电器

-laptop:〜/ Study / Pgm $ ./test
分段错误

我认为这是所有操作系统中的行为,我在Linux平台上使用g ++(4.4.1)。

答案 2 :(得分:2)

嗯...至少基于你看起来想要完成的事情,看起来list.splice可能是适合这项工作的正确工具:

std::list<int> li, li2;

li.push_back(1);
li.push_back(2);
li.push_back(3);

li2.splice(li2.end(), li, li.rend(), li.rbegin());

事实上,splice是使用std::list的几个充分理由之一。

相关问题