如何将vector <string>的元素复制到字符串中?

时间:2018-05-21 07:57:58

标签: c++ string vector copy

我试过复制如下。 不过我遇到了撞车事故。 目前是不是可以使用赋值运算符?

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

3 个答案:

答案 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]时可能会崩溃,因为你试图改变/访问那些首先不存在的东西。

您可以通过两种方式处理它:

  1. std::vector<std::string> string_list(10)在声明向量(例如10)时提及非零大小。这样,字符串向量将由向量内的10个空字符串组成。

  2. 使用string_list.push_back("abc")。即使您没有明确声明具有给定大小的向量,这也会为向量动态分配内存。

  3. 选项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. :)