矢量大小用c ++表示

时间:2016-03-15 23:10:01

标签: c++ matrix vector

所以我在一个小型数学库上工作以获得乐趣,我对这个载体有一点点问题。该方法用于转置矩阵,交换行的列,反之亦然。它正确执行此操作。但是,还有一些奇怪的事情发生了。根据我对3行x 2列矩阵的输入,换位应该以2x3的形式返回。问题是,尽管在方法中将向量设置为2,但向量将以4而不是2的大小返回。我已经在不同的时间点测试了它。一旦调用了#transpose,向量的大小就会变为4。它在答案之前添加了两个大小为0的向量(得到的矩阵向量)。任何想法如何?我对c ++不太熟悉,不知道有什么怪癖。

    Matrix Matrix::transpose() {
        vector<vector<float>> result;
        result.resize(columns);
        for (int col = 0; col < columns; col++) {
            vector<float> data;
            data.resize(rows);
            for (int row = 0; row < rows; row++) {
                data[row] = vec[row][col];
            }
            result.push_back(data);
        }
        return Matrix(result);
    }

1 个答案:

答案 0 :(得分:3)

代码首先调整result的大小,然后使用push_back在循环中追加它。这会导致矢量调整大小两次,并以预期大小的两倍结束。

由于代码打算提前设置大小,因此正确的解决方法是将push_back行更改为result[col] = data