Здравствуйте, ламмму, Вы писали:
Л>Привет!
Л>Вобщем есть текст(std::string) из нескольких строчек...
Л>как поэлегантней получить отдельные строки этого текста(т.е. из string получить vector<string> каждый елемент которого отдельная строкка текста (конец строки может быть как \n так и \r\n))
если lifetime непарсеного буфера дольше чем результирующего вектора то стоит задуматься о применении range'й вместа множественного копирования строк туда-суда-обратно...
#include <boost/range/iterator_range.hpp>
#include <boost/algorithm/string/split.hpp>
std::string buffer = get_text_with_crlf(...);
// ...
typedef std::vector<boost::iterator_range<std::string::const_iterator> > token_list_type;
token_list_type strings;
boost::algorithm::split(strings, buffer, is_any_of("\n\r"));
большенство функций из boost::algorithm принимают range'и.
некоторое время назад для одного проекта было написано 3 парсера какогота там конфига:
1) c использованием std::string::find()
2) с boost::toketizer
3) с iterator_range + boost::algorithm
делая одно и тоже парсеры показали заметно разные времена... (конкретных цифр к сожалению не помню):
в -O0 boost::tokenizer всех порвал в разы, а iterator_range проиграл к томуже еще и банальному find'у
но в -O3 картина кардинально изменилась: iterator_range уверено порвал ВСЕХ
причем find'a в 12 раз!
после этого мы стали сильно любить iterator_rang'e для парса всяких стрингов