Как вставить символ в вектор строк - PullRequest
0 голосов
/ 19 сентября 2018

Разве это не правильный способ вставить символ в вектор строк?

Компилятор возвращает -1073741819, когда я его запускаю.

Ниже приведен код, в которомЯ хочу добавить больше символов рядом с 'A' позже.

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    vector <string> instruction;

    instruction[0].push_back( 'A' );

    return 0;
}

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Вы должны сначала добавить первую строку в вектор, чтобы использовать метод строкового объекта push_back.

int main()
{
    vector <string> instruction;

    instruction.push_back("");
    instruction[0].push_back('A');
    return 0;
}

Но имейте в виду, что вы можете просто использовать оператор += для string класс, чтобы получить те же результаты:

instruction[0] += 'A';
0 голосов
/ 19 сентября 2018

Поскольку вы объявили вектор с типом шаблона как std::string, вы не можете вставить char в него, вместо этого у вас может быть только строка внутри.

Если вы хотите, чтобы строка из одного символа какэлемент вектора, просто:

std::vector <std::string> instruction;
// instruction.reserve(/*some memory, if you know already the no. of strings*/);
instruction.push_back("A");

Что касается использования std :: vector :: operator [] : это неверно, потому что он возвращает ссылку на элемент вИндекс вы запросили.В тот момент, когда вы используете его (в своем коде), элемент недоступен, и, следовательно, его использование приводит вас неопределенное поведение


В комментариях выупомянул, что:

Затем я добавлю несколько символов рядом с A

Если вы намеревались объединить символы с элементами вектора (это строковый тип), вы можете либоиспользуйте operator + = строки, чтобы добавить новый символ в уже существующих строк элементов.

std::vector <std::string> instruction;

instruction.push_back("");  // create an empty string first
instruction[0] += 'A';      // add a character
instruction[0] += 'B';      // add another character

или просто push_back, как вы пытались.Но в последнем случае вам также нужно иметь строковый (пустой или непустой) элемент, существующий в векторе.

...