C ++ с использованием STL List, как скопировать существующий список в новый список - PullRequest
3 голосов
/ 04 апреля 2011

Сейчас я работаю с конструктором копирования для получения списка с именем val типа char, и мне нужно взять все элементы строки v, которые передаются в конструктор копирования, и поместить их в список val.

Public:
LongInt(const string v);

Private:
list<char> val;

Итак, здесь, в публичной части класса LongInt, у меня есть конструктор копирования, который берет список val и копирует в него строку v.Может кто-нибудь помочь мне понять, как это сделать?Заранее спасибо!

Ответы [ 4 ]

3 голосов
/ 04 апреля 2011

Вам придется перебирать строку и извлекать данные символ за символом.Использование алгоритма std::copy должно работать:

std::copy(v.begin(), v.end(), std::back_inserter(val));
1 голос
/ 04 апреля 2011
LongInt::LongInt( const string v ) : val(v.begin(), v.end())
{
}
1 голос
/ 04 апреля 2011

В вашем конструкторе LongInt просто используйте конструктор iterator, iterator list:

LongInt(const string v) : val(v.begin(), v.end()) { }

Как уже говорилось, рассматривали ли вы на самом деле string или возможно deque<char> манипулировать вашей последовательностью, а не list?В зависимости от ваших потребностей, эти альтернативы могут быть лучше.

0 голосов
/ 04 апреля 2011

Во-первых, используйте std::string, если вы храните строку. Это контейнер, как и любой другой. Если вы не можете или не хотите сохранять строку, используйте std::vector. Но это все равно сводится к менее функциональному std::string, поэтому просто используйте std::string.

Для копирования:

std::copy( v.begin(), v.end(), std::back_inserter(val) );

Но просто используйте std::string, если вы храните список char.

...