C++-如何创建多维数组
C++ - How do you create multidimensional arrays?
我是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()
方法)。
相关文章:
- 在c++中为double类型的数组创建一个unique_ptr
- 如何从预定义的数组创建某些元素数组
- 基于数组的列表 - 动态数组创建时出错
- 从 UTF-8 字节数组创建字符串?
- 是否可以在并行区域中为共享 2D 数组创建选定元素的线程本地副本?(共享,私有,障碍:OPenMP)
- C++ 从名称数组创建对象
- 从数组创建 Mat 时,'cv::Mat' 和 'int' 类型不兼容
- 从 std::数组创建十六进制代表
- 在 C++ 结构内声明的数组 A[1] 创建多个实例
- 为多维数组创建内存空间
- 如何使用任何类型的数组创建模板类并为其设置值?
- 从字符串数组创建一个字符数组
- 是否可以在不为该数组创建变量的情况下将数组作为参数传递到函数中?
- 使用类定义数组创建C++类
- 使用具有唯一随机数的结构数组创建多个对象
- 谷歌测试:无法从字符数组创建字符串
- 从 1D 数组创建 2D 数组
- 无法通过一个单向链表数组创建邻接列表
- 如何使用数组创建标准::函数
- 在C++中,返回从本地字符数组创建的字符串是否会导致内存泄漏或未定义的行为