Допустим, у меня есть список, содержащий некоторые целые числа, мне нужно быстро слить его с собой: например, у меня есть {1, 2, 3} после этой процедуры, я хочу, чтобы список быть {1, 2, 3, 1, 2, 3} Эти версии сделать это, но слишком медленно, когда размер списка достаточно велик (10^6)Как выполнить быстрый слияние списка C++ с самим собой
list<int> l; //l got some integers here
list<int> l_copy = l;
while (l_copy.size() > 0)
{
l.push_back(l_copy.front());
l_copy.pop_front();
}
//another version but still slow i think
size_t size = l.size();
for (list<int>::iterator it = l.begin(); size--; ++it)
{
l.push_back(*it);
}
есть ли какие-либо альтернативы для этого, но значительно быстрее ? благодаря
Как насчет того, чтобы сделать копию списка, а затем соединить копию с оригиналом? – rcgldr
Списки включают в себя динамическое распределение памяти на узел, поэтому их расширение никогда не будет быстрым. Возможно, вы захотите рассмотреть, например, 'deque' соответствует вашим потребностям - по крайней мере, он группирует элементы в меньшее количество смежных распределений. В качестве альтернативы, для некоторых целей вы можете использовать пользовательский распределитель, который дважды посещает элементы. –
Возможно, это не имеет значения, но какова цель удвоения? Вы можете создать контейнер/итератор, который * действует *, как список, удвоенный. – Persixty