#c #list #loops
#c #Список #циклы
Вопрос:
Я пытаюсь извлечь некоторые данные из большой строки. Я хочу split
a string
уменьшить strings
и сохранить его в a list
. После этого я хочу зациклить каждую строку в этом списке и split
ее снова на меньшем list of strings
, а после этого append
это list
на одном большом list of lists
. Когда я пытаюсь вставить small list
в big list
, он вставляет значения из одного списка в другой, но не сохраняет форму, list in list
а вместо этого создает ее string in list
. Как я мог бы сохранить первый, чтобы, когда я выполняю цикл с большим списком, он создавал маленькие списки?
//a.hpp
std::list<std::string> Splitter(std::string str_to_splt, std::string delimeter) {
size_t pos = 0;
std:: string token;
std::list<std::string> delimeted_data;
while ((pos = str_to_splt.find(delimeter)) != std::string::npos) {
token = str_to_splt.substr(0, pos);
delimeted_data.push_back(token);
str_to_splt.erase(0, pos delimeter.length());
}
return delimeted_data;
// a.cpp
readBuffer = regex_replace(readBuffer, regex("\r"), ""); // get some string of data
main_data_without_newlines = Splitter(readBuffer, "n"); // split it to a list
for (string v: main_data_without_newlines){
servers = Splitter(v, ","); // split every string in list and output a new small list
main_data_edited.insert(main_data_edited.end(), servers.begin(), servers.end()); // insert small list to big one -> inserted values are strings, not lists
}
Комментарии:
1. Вам нужен
std::list<std::list<std::string>>
? Я предложу присвоить вашим внутренним даннымstd::list<std::string>
полное имя в качестве структуры / класса вместо использования вложенного списка.2. итак, я должен составить список структур?
Ответ №1:
insert
вставляет каждый элемент итерированного объекта ( servers
) в целевой список. Каждый элемент является std::string
. Также вы вставляете элементы в std::list<std::string>
, который не допускает элементы подсписка (поскольку элементы должны быть строками). Если вам нужен список списков, вам нужно создать один, например
std::list<std::list<std::string>> lists;
for (const auto amp;v: main_data_without_newlines) {
lists.push_back(Splitter(v, ","));
}