c++ - 我无法在 C++ 中初始化结构值

标签 c++ vector struct

我有这个变量:

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/

相关文章:

c++ - vector 导致的段错误

c++ - vector 、迭代器和 std::find

c - 了解与结构数组相关的 Malloc 和 Realloc

amazon-web-services - 即使存在也缺少 key

python - 重载加法、减法和乘法运算符

c - 在 C 中为结构类型分配内存

c++ - undefined reference 但(动态)库已链接。 (可能是 bad reloc address error)

c++ - 自定义对象的 QList

c++ - 良好做法 : Default arguments for pure virtual method

c++ - 异步服务器在没有明显原因的情况下停止从客户端获取数据