Как я могу скопировать элемент вектора <string>в строку? - PullRequest
0 голосов
/ 21 мая 2018

Я пытался скопировать, как показано ниже.Я встретил крах, хотя.Разве нельзя использовать оператор присваивания в это время?

std::vector<std::string> string_list;
std::string str;
string_list[0] = "abc";
str = string_list[0];

Ответы [ 3 ]

0 голосов
/ 21 мая 2018

Ваш вектор строк string_list

std::vector<std::string> string_list;

пуст, т. Е. Не содержит ни элемента, ни строки вообще, size() для этого std::vector вернет ноль.

Затем в утверждении:

string_list[0] = "abc";

Вы пишете в элемент вектора, который не существует и который приводит к неопределенному поведению (в вашем случае, программа падает).


Попробуйте вместо этого инициализировать вектор следующим образом:

std::vector<std::string> string_list(1);

Таким образом, вектор string_list будет содержать одну пустую строку (т. Е. Созданный по умолчанию объект std::string),доступ к которому вы можете получить, используя operator[] (как вы уже сделали) для вашего вектора строк string_list:

string_list[0] = "abc";

Делая это, вы используете оператор присваивания этой пустой строки.

0 голосов
/ 21 мая 2018

Так как ваш вектор пуст, вы можете получить сбой при попытке доступа к string_list[0], потому что вы пытаетесь изменить / получить доступ к тому, чего нет в первую очередь.

Вы можетепозаботьтесь об этом двумя способами:

  1. std::vector<std::string> string_list(10) При объявлении вектора укажите ненулевой размер (например, 10).Таким образом, вектор строк будет состоять из 10 пустых строк внутри вектора.

  2. Использовать string_list.push_back("abc").Это будет динамически выделять память для вашего вектора, даже если вы явно не объявите вектор с заданным размером.

Опция 1:

std::vector<std::string> string_list(10);
string_list[0] = "abc"; // This is okay.

Опции 2:

std::vector<std::string> string_list; // Note that no size mentioned here.
string_list.push_back("abc"); //This is okay as well. :)
0 голосов
/ 21 мая 2018

Ваш вектор пуст, поэтому попытка доступа к первому элементу приведет к сбою.Вы можете инициализировать вектор следующим образом:

std::vector<std::string> list = {"my string"};
std::string s = list[0];

Или, если вы предпочитаете динамически увеличивать список, вы можете сделать:

std::vector<std::string> list;
list.push_back("my string");
std::string s = list[0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...