В приведенном ниже коде примера после присвоения списка примеров с номерами я пытаюсь продублировать контейнер с std::copy
, но проблема во время выполнения: "не может разыменовать итератор конечного списка".
мой вопрос: как мне продублировать список, чтобы дублированный диапазон был вставлен в конец списка?
до конца, потому что позже мне нужно будет удалить дублированный диапазон, поэтому я сохраняю начало нового диапазона в итераторе.
#include <iostream>
#include <list>
#include <algorithm>
void print(std::list<int>& ref)
{
for (auto& num : ref)
{
std::cout << num << std::endl;
}
}
int main()
{
std::list<int> mylist{ 1, 2, 3, 4 };
std::list<int>::iterator iter = mylist.end();
std::cout << "INITIAL LIST NUMBERS" << std::endl;
print(mylist);
// duplicate list, will cause runtime error
iter = std::copy(mylist.begin(), mylist.end(), --mylist.end());
std::cout << "COPIED LIST IS NOW CONTAINS DUPLICATE NUMBERS" << std::endl;
print(mylist);
// remove previsous duplication
mylist.erase(iter, mylist.end());
std::cout << "AFTER REMOVAL OF COPIED LIST SHOULD BE SAME AS INITIAL LIST" << std::endl;
print(mylist);
std::cin.get();
return 0;
}