用字符串向量分配字符串向量的向量
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 个点('.')。我不明白这种行为。 行为是未定义。这意味着该标准对它可以做什么没有任何限制。每次运行它时它都可以做不同的事情。它可以格式化你的硬盘。 明白,谢谢以上是关于用字符串向量分配字符串向量的向量的主要内容,如果未能解决你的问题,请参考以下文章