C++-如何创建多维数组

C++ - How do you create multidimensional arrays?

本文关键字:数组 创建 何创建 C++-      更新时间:2023-10-16

我是C++的新手。我正在尝试创建一个多维数组。这个代码出了什么问题?

int sorted_array[] = {{2, 3}, 5, 7};

它给了我这个错误。

error: braces around scalar initializer for type 'int'

谢谢。

在声明多维数组时,必须指定除第一个维度之外的所有维度。

例如

int sorted_array[][2] = {{2, 3}, {5}, {7}};

相当于:

int sorted_array[3][2] = {{2, 3}, {5}, {7}};

您不能使用:

int sorted_array[][] = {{2, 3}, {5}, {7}};

并且期望编译器推导出第二维度的CCD_ 1。

创建多维数组的方法有很多:

int sorted_array[2][2] = {{2,3},{5,7}};

这将创建一个数组,该数组存储2个int数组,其中存储2个整数

但我会修复一个矢量

#include <vector>
std::vector<std::vector<int> > sorted_array = {{2,3},{5,7}};

这是一样的,但矢量有更多的功能

你可以通过相同的方式访问它们:

sorted_array[0][1] = 3;

其他答案当然是正确的,但值得一提的是,创建2D阵列的一种方便方法是将平行主std::vector封装在类中,如下所示:

template<typename _Ty>
class matrix {
    // used to enabled [][] overload on matrix objects
    class proxy_row_vector {
    public:
        proxy_row_vector(std::vector<_Ty>& _vec, std::size_t _cols, std::size_t _row_index) 
            : vec(_vec), cols(_cols), row_index(_row_index) {}
        const _Ty& operator[](std::size_t col_index) const {
            return vec[row_index*cols + col_index];
        }
        _Ty& operator[](std::size_t col_index) {
            return vec[row_index*cols + col_index];
        }
    private:
        std::vector<_Ty>& vec;
        std::size_t cols;
        std::size_t row_index;
    };
public:
    matrix(std::size_t _rows, std::size_t _cols) 
        : mtx(_rows*_cols), rows(_rows), cols(_cols) {}
    proxy_row_vector operator[](std::size_t row_index) const {
        return proxy_row_vector(mtx, cols, row_index);
    }
    proxy_row_vector operator[](std::size_t row_index) {
        return proxy_row_vector(mtx, cols, row_index);
    }
    std::vector<_Ty>::const_iterator cbegin() const {
        return mtx.cbegin();
    }
    std::vector<_Ty>::const_iterator cend() const {
        return mtx.cend();
    }
    // ... other iterator access methods ...
private:
    std::vector<_Ty> mtx;
    std::size_t rows;
    std::size_t cols;
};

然后,您可以简单地创建一个2D数组,并使用索引或迭代器操作元素,如下所示:

matrix<int> m(3,3); // default initialises 3x3 matrix of ints
m[0][0] = 1; // set first row, first column element to 1
for (auto& el : m) 
    el = 4; // fill m with value 4

这种方法的优点是简单的迭代器支持,允许您使用任何标准算法来操作矩阵元素,并为任何2D元素数组提供方便的托管接口。

注意:上面的类matrix非常小,您显然希望提供更多的方法和构造函数(例如用于边界检查的at方法,以及分别用于查找矩阵的行数和列数的rows()方法和columns()方法)。