我试过复制如下。 不过我遇到了撞车事故。 目前是不是可以使用赋值运算符?
std::vector<std::string> string_list;
std::string str;
string_list[0] = "abc";
str = string_list[0];
答案 0 :(得分:4)
您的矢量为空,因此尝试访问第一个元素将导致崩溃。您可以像这样初始化矢量:
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];
答案 1 :(得分:3)
你的字符串向量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";
通过这样做,您正在使用该空字符串的赋值运算符。
答案 2 :(得分:3)
因为你的向量是空的,当你试图访问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. :)