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

Вот самый простой способ, который я использовал в своих приложениях. Добавьте нижеуказанные 3 строки кода в App_Start\\WebApiConfig.cs в функции Register

    var formatters = GlobalConfiguration.Configuration.Formatters;

    formatters.Remove(formatters.XmlFormatter);

    config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));

Web-API Asp.net автоматически преобразует ваш возвращаемый объект в JSON и добавит application/json в заголовке поэтому браузер или получатель поймут, что вы возвращаете результат JSON.

39
задан kal 20 January 2009 в 03:46
поделиться

4 ответа

Почему Вы выполнили бы итерации и не использовали бы стандартный алгоритм копии?

std::copy( vector.begin(), vector.end(), std::back_inserter( list ) );
85
ответ дан Doug T. 5 August 2019 в 15:42
поделиться

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

0
ответ дан ChrisW 5 August 2019 в 15:42
поделиться

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

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

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

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

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

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

1
ответ дан Community 5 August 2019 в 15:42
поделиться

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

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

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

59
ответ дан Fred Larson 5 August 2019 в 15:42
поделиться
Другие вопросы по тегам:

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