@shevzoom
 dev., student at MEPhI

Почему не удаляются элементы из списка?

Хочу создать список и загрузить туда свои, потом надо удалить какой либо элемент и вставить новый
почему , что до l1.pop_front(); l1.pop_back(); что после выводится на экран одно и тоже?
list<Student> l1;
    fstream file{"some.txt"};

    Student report("Gosha",75);
    while (getString(file, report))
        l1.push_back(report);

    Student report1("Artem",100);
    getString(file, report1);
    l1.push_back(report1);

    Student report2("Dasha",85);
    getString(file, report2);
    l1.push_back(report2);

    report.print();
    report1.print();
    report2.print();

    l1.pop_front();
    l1.pop_back();

    report.print();
    report1.print();
    report2.print();
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
Когда вы делаете l1.push_back(report);, в список добавляется копия report. Содержимое l1 не имеет никакого отношения к report, report1, report2. Соответственно, когда вы будете изменять l1, естественно, переменные report* не будут меняться.

Как сделать так, чтобы копий не создавалось. Делайте l1.emplace_back(); (при необходимости, передайте туда параметры для конструктора Student). Далее: l1.back() вернёт вам ссылку на свежесозданного студента, и вы сможете его дозаполнить, если нужно. (Осторожнее со ссылкой, а то опять копию создадите :) )
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы