我想用不同的字符串向量填充字符串向量的向量。但是它没有被填充,并且有相同的空值,它们在定义期间被初始化。
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];
输出为空。
让我们在这里遍历代码:
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。但这超出了字符串的结尾,因此这是未定义的行为。
在未定义的行为之后,所有投注均关闭。