用字符串向量分配字符串向量的向量

Posted

技术标签:

【中文标题】用字符串向量分配字符串向量的向量【英文标题】:Assigning vector of vector of string with vector of string 【发布时间】:2020-01-10 01:42:27 【问题描述】:

我想用不同的字符串向量填充字符串向量的向量。但它没有被填充,并且存在相同的空值,这些值在定义期间被初始化。

int A = 3;
vector<string> s(A);
vector<vector<string>> st(A , vector<string> (A));
  for(int i = 0; i < A;i++)
    for(int j =0; j<A;j++)
        s[i][j] = '.';

st.at(0) =s;
vector<string> ss(A) ;
ss = st[0];
for(int i = 0; i < A;i++)
    for(int j =0; j<A;j++)
        cout<<ss[i][j];

输出为空。

【问题讨论】:

看看s这个时候你做st.at(0) =s;是否为空 @TheUndeadFish 我已经通过printing.s检查了同样的内容。s不为空。 【参考方案1】:

让我们来看看这里的代码:

int A = 3;
/*1*/ vector<string> s(A);
/*2*/ vector<vector<string>> st(A , vector<string> (A));
/*3*/   for(int i = 0; i < A;i++)
/*4*/     for(int j =0; j<A;j++)
/*5*/         s[i][j] = '.';

在标记为“1”的行上,您创建了一个包含三个空字符串的向量 (s)。 在标记为“2”的行上,创建一个包含三个向量的向量 (st),每个向量包含 3 个空字符串。

在第 3-5 行的循环中,您尝试将一个字符分配给 s 中每个字符串的位置 0..2。但这超出了字符串的末尾,所以这是未定义的行为。

在未定义的行为之后,所有的赌注都关闭了。

【讨论】:

明白。当我检查大小时,它仍然是 3 个空字符串,但是当我使用两个 for 循环打印时,它会打印 9 个点('.')。我不明白这种行为。 行为是未定义。这意味着该标准对它可以做什么没有任何限制。每次运行它时它都可以做不同的事情。它可以格式化你的硬盘。 明白,谢谢

以上是关于用字符串向量分配字符串向量的向量的主要内容,如果未能解决你的问题,请参考以下文章

通过分配字符串向量创建具有列名的空数据框? [复制]

为啥我可以将字符分配给字符串对象而不是字符串对象的向量?

为字符串向量预分配内存(C++ vector<string>)

预先分配的向量向量,但在填充它时仍然线性增加内存

用向量的向量的元素初始化向量的空向量

如何将字符复制到字符串向量中