слова по разделителю ' '? Нужно всегда писать цикл с find и двигать итератор?
Попробуй ещё через поток сделать stringstream
Хотел спросить, а какой overhead от stringstream при этом?
есть рэнжи в С+=20, там есть std::view::split
Это же получается линейный алгоритм, считываем поток, пока не встретится нужный символ?
std::vector<std::string> split(std::string_view str, std::string_view delim) { std::vector<std::string> result; for (std::string_view word : std::views::split(str, delim)) { result.emplace_back(word); } return result; }
Спасибо, прикольно
Линейный это да, но не будет ли лишней копии исходной строки в буфер?
https://en.cppreference.com/w/cpp/io/basic_stringstream/basic_stringstream 3) Uses a copy of str as initial contents of the underlying string device. The underlying basic_stringbuf object is constructed as basic_stringbuf<Char,Traits,Allocator>(str, mode). я про это, то есть будет копия
да я этот код скопировал
string line, word; while (std::getline(cin, line)) // initialize line { // move data from line into istream (so it's no longer in line): istringstream istream( std::move( line ) ); while (istream >> word) // parse word here } В интернете пишут, что помочь избавиться от копии поможет move
а шо там наивного?)
Ну это влажные мечты, реальные ренжи неюзабельные (их немного фиксили, но совсем недавно, и там тоже не так будет коротко)
хахахаахах, ну класс
о, кстати, да с cxx20 появился move конструктор 6) Move-construct the contents of the underlying string device with str. The underlying basic_stringbuf object is constructed as basic_stringbuf<Char,Traits,Allocator>(std::move(str), mode).
Обсуждают сегодня