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