>我尝试像下面这样复制。 不过,我遇到了崩溃。 目前无法使用赋值运算符吗?
std::vector<std::string> string_list;
std::string str;
string_list[0] = "abc";
str = string_list[0];
您的向量为空,因此尝试访问第一个元素将导致崩溃。您可以像这样初始化向量:
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];
你的字符串向量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";
通过执行此操作,您将使用该空字符串的赋值运算符。
由于您的向量是空的,因此当您尝试访问string_list[0]
时可能会崩溃,因为您正在尝试更改/访问最初不存在的内容。
您可以通过两种方式处理它:
-
std::vector<std::string> string_list(10)
在声明向量时提及非零大小(例如 10 (。这样,字符串向量将由向量内的 10 个空字符串组成。 -
使用
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. :)