Лучший способ скопировать вектор в список в STL? - PullRequest
39 голосов
/ 19 января 2009

Итерация по вектору с использованием итератора и копирование в список наиболее оптимального метода копирования. Любые рекомендации?

Ответы [ 5 ]

85 голосов
/ 19 января 2009

Зачем вам повторять и не использовать стандартный алгоритм копирования?

std::copy( vector.begin(), vector.end(), std::back_inserter( list ) );
59 голосов
/ 19 января 2009

Если вы создаете новый список, вы можете воспользоваться конструктором, который принимает итераторы начала и конца:

std::list<SomeType> myList(v.begin(), v.end());

Ответ Каспрзола идеален, если у вас есть список, к которому вы хотите добавить.

6 голосов
/ 16 августа 2013
list.assign(vector.begin(), vector.end());
1 голос
/ 24 января 2009

Мне нравится это предложение для создания нового списка.

std::list<SomeType> myList(v.begin(), v.end());

Но при добавлении в существующий список следующее может быть оптимальным для небольших наборов данных. Под «оптимальным» я подразумеваю, что легче всего запомнить, как это сделать, и легче всего понять. (Это субъективные утверждения, я уверен, что это зависит от того, как устроен ваш мозг.)

for ( unsigned i=0; i<v.size(); i++ ) myList.push_back(v[i]);

Использование итераторов для векторов может быть чрезмерно педантичным во многих случаях. Простое индексирование обычно работает нормально.

Другой поток обращается к итераторам и индексам ( здесь ). В этой теме полученный ответ в основном предпочитал итераторы, потому что они более общие. Но если векторы являются наиболее часто используемым типом контейнера, я думаю, что целесообразно специализировать этот простой алгоритм.

0 голосов
/ 19 января 2009

Вы можете попытаться использовать более хитрые вещи из заголовка <algorithm>, например for_each или copy ... но, на мой взгляд, они могут составить одно и то же.

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