c ++ перечисляет вопрос - PullRequest
1 голос
/ 07 мая 2010

Я хочу поместить значение из начала списка в другой список, но получаю ошибку.

для примера

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 ]

8 голосов
/ 07 мая 2010

pop_front() просто удаляет первый элемент из списка. Не возвращает элемент.

Вам нужно вызвать front(), чтобы получить элемент в начале, а затем вызвать pop_front(), чтобы удалить его из списка:

li2.push_back(li.front());
li.pop_front();
4 голосов
/ 07 мая 2010

Также имейте в виду, что когда список пуст, 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;
}

Ouput

-laptop: ~ / Study / Pgm $ ./testОшибка сегментации

Я думаю, что это поведение во всех ОС, я использую g ++ (4.4.1) на платформе Linux.

2 голосов
/ 07 мая 2010

Хм ... по крайней мере, исходя из того, что вы пытаетесь достичь , похоже, 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 вообще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...