我有这个变量:
struct mat{
int row;
int column;
};
vector<bool> aux;
在 main 函数中,我通过这种方式初始化了一个 mat vector :
int main(){
int n,r,c;
char s;
cin >> n;
vector<mat> matrices = vector<mat> (27);
aux = vector<bool> (32,false);
for(int i=0; i<n;++i) {
cin >> s >> r >> c;
matrices[s-'A'].row = r;
matrices[s-'A'].column = c;
aux[s-'A'] = true;
}
但是当我离开 for
循环时,我调用了一个在 shell 中写入 vector 矩阵的函数:
void writeMatrices(vector<mat>& matrices){
for(int i = 0; i < aux.size(); ++i){
if(aux[i]) {
cout << char ('A'+i) << " Rows: " << matrices[i+'A'].row << " Columns: " << matrices[i+'A'].column << endl;
}
}
}
而且我只得到 0。
有人知道为什么吗?
最佳答案
问题是您在读回索引时错误地将 'A'
的值添加到您的索引中。 writeMatrices
的代码应该是这样的:
void writeMatrices(vector<mat>& matrices){
for(int i = 0; i < aux.size(); ++i){
if(aux[i]) {
cout << char ('A'+i)
// note that the index for matrices should be i, not i+'A' !
<< " Rows: " << matrices[i].row
<< " Columns: " << matrices[i].column
<< endl;
}
}
}
与此输入数据一起使用:
6
A 1 2
B 2 3
C 3 4
D 4 5
E 5 6
F 6 7
我们现在得到这个输出:
A Rows: 1 Columns: 2
B Rows: 2 Columns: 3
C Rows: 3 Columns: 4
D Rows: 4 Columns: 5
E Rows: 5 Columns: 6
F Rows: 6 Columns: 7
在您的代码中进行一些错误检查可以让您更快地发现这个问题。
关于c++ - 我无法在 C++ 中初始化结构值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22766039/