向量的向量与数组的数组(二维,矩阵)不同。
虽然一维vector<double>.data()
指向连续的内存空间(例如,您可以这样做memcpy
),但每个“子向量”都分配自己的独立内存缓冲区。因此vector<vector<double>>.data()
没有意义,不能用作矩阵。
在 C++ 中,二维数组array2D[W][H]
与array[W*H]
. 因此,两者都可以由相同的例程处理(当它有意义时)。考虑以下示例:
void fill_array(double *array, size_t size, double value) {
for (size_t i = 0; i < size; ++i) {
array[i] = value;
}
}
int main(int argc, char *argv[])
{
constexpr size_t W = 10;
constexpr size_t H = 5;
double matrix[W][H];
// using 2D array as 1D to fill all elements with 5.
fill_array(&matrix[0][0], W * H, 5);
for (const auto &row: matrix) {
for (const auto v : row) {
cout << v << '\t';
}
cout << '\n';
}
return 0;
}
在上面的示例中,您可以double matrix[W][H];
替换vector<double> matrix(W * H);
并matrix.data()
输入fill_array()
. 但是,您不能声明vector(H) 的vector(W)。
PS有很多数学向量和矩阵的C++实现。如果您不想处理 C 样式的数组,可以使用其中之一。