Сохранить список списков в C

#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, ","));
}