std :: vector <int> vec [nx] [ny];

时间:2016-07-23 19:02:34

标签: c++ vector stl stdvector

我熟悉STL载体。但是,我想知道当我初始化一个像下面的向量时调用哪个构造函数以及它做了什么:

int nx=5; int ny=7; std::vector<int> myvec[nx][ny];

更新: 我用TDM-GCC 4.9.2编译了代码,但显然它需要用&#34; const int&#34;来初始化。对于其他一些编译器,所以我在这里重写它:

#include <iostream>
#include <vector>

using namespace std;

int main(){
std::vector<int> myvec[7][9];
return 0;
};

感谢。

2 个答案:

答案 0 :(得分:3)

将从here

调用构造函数1

实际上有63次,因为你正在创建63个std :: vector,而不是一个2d向量。

它会编译。但它不应该。你在这里有一个VLA。它不是有效的C ++代码。

答案 1 :(得分:2)

请注意,变量nxny需要const限定,因为变长数组不是标准C ++。

但是,当将这些变量更改为const int时,这将声明一个包含5行和7列默认初始化std::vector<int>实例的2D数组,这样2D数组的每个元素最初都是int类型的空向量。

虽然这就是它的作用,但并不是说你应该做这样的事情 - {C}风格的std::vector对象数组是一个奇怪的结构。如果你想要一个固定矩阵,其中每个元素都是std::vector,那么请使用以下代码(例如):

std::array<std::array<std::vector<int>, 7>, 5> mtx_vec;