如何声明具有特定大小的多维数组?

时间:2019-05-21 07:14:57

标签: c++ visual-studio

我最初是通过数组声明的:

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”会更容易,但是我不知道如何声明它。

谢谢。

3 个答案:

答案 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,分配该动态内存时程序将崩溃。