Загрузка данных в вектор структур

#c #vector #struct

#c #вектор #структура

Вопрос:

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

Вот структура

 struct LineInfo
{       
    int lineNumber;         
    string text;            
};
  

Вот основная программа

 vector<LineInfo> globalDocument;

int main()
{
    cout << "COSC 120 line editing system now running." << endl << endl;
    bool done = false;
    while ( !done )
    {
        cout << "> ";
        string inputBuffer;
        getline( cin, inputBuffer );
        int lineNumber;
        splitLineNumberAndText( inputBuffer, lineNumber );
        ptr.push_back( amp;lineNumber );
        if ( lineNumber > 0 )
            handleTextLine( inputBuffer, lineNumber );
        else
            done = handleSystemCommand( inputBuffer );
    }

    cout << endl << "COSC 120 line editing system has shut down. Bye." << endl;
    return 0;
}
  

Это получает номер строки и текст из входных данных, затем разбивает их на int и string и отправляет в handleTextLine

Вот функция

 void handleTextLine( const stringamp; s, int lineNumber2 )
{
    globalDocument.lineNumber.push_back(lineNumber2);
    globalDocument.text.push_back(s);
}
  

Комментарии:

1. С какой проблемой вы столкнулись? В чем ваш вопрос?

Ответ №1:

vector<LineInfo> globalDocument это вектор LineInfo структур, поэтому вы должны вставлять в него LineInfo объекты push_back:

 void handleTextLine( const stringamp; s, int lineNumber2) {
    LineInfo li;
    li.lineNumber = lineNumber2;
    li.text = s;
    globalDocument.push_back(li);
}
  

Или, используя синтаксис инициализации структуры:

 void handleTextLine( const stringamp; s, int lineNumber2) {
    LineInfo li = {lineNumber2, s};
    globalDocument.push_back(li);
}
  

Вы можете получить еще более компактный код вставки, если объявите конструктор для LineInfo :

 struct LineInfo {

    // Default constructor
    LineInfo() : lineNumber(0) {}

    // Constructor taking 2 arguments
    LineInfo(int n, string s) : lineNumber(n), text(s) {}

    int lineNumber;
    string text;
};

void handleTextLine( const stringamp; s, int lineNumber2) {
    globalDocument.push_back(LineInfo(lineNumber2, s));
}