C ++: элегантный способ разбить содержимое строки и содержимого на std :: vector - PullRequest
10 голосов
/ 30 октября 2010

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

Я мог бы использовать boost :: split, создать вектор из строк токенов, а затем использовать std :: transform.

Каково ваше решение?Использование наддува допустимо.

Ответы [ 4 ]

8 голосов
/ 30 октября 2010

Примерно так:

std::istringstream iss("42 4711 ");
std::vector<int> results( std::istream_iterator<int>(iss)
                        , std::istream_iterator<int>() );

4 голосов
/ 30 октября 2010

Вы можете использовать Boost.Tokenizer .Его можно легко обернуть в функцию explode_string, которая принимает строку и разделитель и возвращает вектор токенов.

Использование transform в возвращаемом векторе - хорошая идея для преобразования строк вИнтс;Вы также можете просто передать итератор Boost.Tokenizer в алгоритм transform.

1 голос
/ 30 октября 2010

Используйте библиотеку строкового алгоритма Boost, чтобы split перевести строку в вектор строк, затем std::for_each и либо atoi, либо boost::lexical_cast, чтобы превратить их в int с.Вероятно, это будет намного проще, чем другие методы, но, возможно, не будет иметь наибольшую производительность из-за копии (если у кого-то есть способ улучшить и удалить это, пожалуйста, прокомментируйте).1009 *

http://www.boost.org/doc/libs/1_44_0/doc/html/string_algo.html http://www.boost.org/doc/libs/1_44_0/libs/conversion/lexical_cast.htm

0 голосов
/ 30 октября 2010

Вы всегда можете использовать strtok или string.find ().

...