我将如何初始化二维数组?它声明我需要对多维数组的维度进行绑定。
头:
Class MyClass{
private:
long x;
long y;
long matrix[][];
public:
MyClass(long x, long y);
}
源:
MyClass:MyClass(long a, long b){
x = a;
y = b;
matrix[x][y];
}
这就是我想要做的。
答案 0 :(得分:2)
使用std::vector<std::vector<long>>
:
private:
long x;
long y;
std::vector<std::vector<long>> matrix;
public:
MyClass(long x, long y) : x(x), y(y), matrix(x, std::vector<long>(y)) { }
};
答案 1 :(得分:0)
我建议您使用一个std::vector
大小rows * cols
来包含您的值。然后,您可以通过步幅访问给定的(row, col)
:
#include <iostream>
#include <vector>
class Matrix {
public:
Matrix(std::size_t rows, std::size_t cols)
: m_data(rows * cols),
m_rows(rows),
m_cols(cols) { }
long operator()(std::size_t row, std::size_t col) const {
return m_data[row * m_cols + col];
}
long& operator()(std::size_t row, std::size_t col) {
return m_data[row * m_cols + col];
}
// other methods here...
private:
std::vector<long> m_data;
std::size_t m_rows;
std::size_t m_cols;
};
int main() {
std::size_t rows = 3;
std::size_t cols = 6;
long value = 0;
Matrix A(rows, cols);
// fill
for(std::size_t row = 0; row < rows; ++row) {
for(std::size_t col = 0; col < cols; ++col) {
A(row, col) = value++;
}
}
// print
for(std::size_t row = 0; row < rows; ++row) {
for(std::size_t col = 0; col < cols; ++col) {
std::cout << A(row, col) << " ";
}
std::cout << std::endl;
}
return 0;
}
一些优点:
std::vector
请记住,在C ++中,符号A[M][N]
仅对编译器有意义,并且最终会以行主顺序生成内存A[M * N]
的线性段。