Подтвердить что ты не робот

Лучший способ скопировать вектор в список в STL?

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

4b9b3361

Ответ 1

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

std::copy( vector.begin(), vector.end(), std::back_inserter( list ) );

Ответ 2

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

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

Ответ Kasprzol идеально подходит, если у вас есть существующий список, к которому вы хотите добавить.

Ответ 3

list.assign(vector.begin(), vector.end());

Ответ 4

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

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

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

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

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

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

Ответ 5

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