我最初是通过数组声明的:
constexpr auto array_size = 50000000;
double M[array_size][2][20]= { };
但是,它将在运行时崩溃。
我打算使用向量:
我找到了二维数组的示例:
std::vector<std::vector<int>> array = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
但是,我不知道如何为每个维度分配矢量大小(例如:50000000)。
也许通过“ new”会更容易,但是我不知道如何声明它。
谢谢。
答案 0 :(得分:0)
std::vector
是运行时类似数组的类。
std::array
是一个编译时类似数组的类。
我只能假设它崩溃了,因为50000000是分配给单个对象的大量内存,而我只能假设您这样做了几次。
要调整std::vector
的大小,请像这样使用resize( uNewSize )
函数成员:
std::vector< int > vecIntegers { 1, 2, 3 }; // size is 3.
vecIntegers.resize( 4 );
vecIntegers[ 3 ] = 4;
for ( auto integer: vecIntegers )
std::cout << integer << ' ';
该程序将打印1 2 3 4
。
std::vector
的多维数组是通过将其嵌套在问题中来完成的:
std::vector<std::vector<std::vector<int>>> vec3d;
答案 1 :(得分:0)
您可以使用std :: vector的resize成员:
std::vector<std::vector<std::vector<double>>> multivec;
multivec.resize(outersize);
for (int i = 0; i < outersize; ++i)
multivec[i].resize(midsize);
等用于内循环
或使用for范围循环(调整大小后)
for (auto &vec : multivec)
vec.resize(midsize);
答案 2 :(得分:0)
如果数据大小固定,则首选std::array。
#include <iostream>
#include <array>
int main() {
using array1d = std::array<int, 2>;
using array2d = std::array<array1d, 50>;
std::array<array2d,5000> a1;
std::cout << "size = "<< sizeof(a1);
return 0;
}
2 * 20 * 50000000 = 2GB,分配该动态内存时程序将崩溃。