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



>我尝试像下面这样复制。 不过,我遇到了崩溃。 目前无法使用赋值运算符吗?

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]时可能会崩溃,因为您正在尝试更改/访问最初不存在的内容。

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

  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. :)

相关内容

最新更新