2016-07-23 39 views
-6

我熟悉STL向量。不过,我想知道哪些调用构造函数和它做什么,当我最初的向量类似如下:std :: vector <int> vec [nx] [ny];

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

更新: 我编译的代码与TDM-GCC 4.9.2,但显然它需要用“const int”对其他编译器进行初始化,所以我在这里重写它:

#include <iostream> 
#include <vector> 

using namespace std; 

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

谢谢。

+1

希望你知道你正在创建矢量的2D阵列(7×9),而不是一个二维向量。 – rustyx

回答

4

将从here

,因为你要创建63个的std ::载体,不是一个2D向量被称为构造1其实63倍。

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

+2

这段代码非常好。它将创建一个2d阵列的行= 7和col = 9的类型向量 rj99999

+0

@ rj99999第一个代码示例是无效的C++。 – juanchopanza

+0

为什么你认为它不是有效的C++?你在谈论用于声明数组的变量吗?你的意思是,那么它实际上是依赖于编译器的,代码将在许多编译器中编译。试试gcc – rj99999

2

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

但是,改变这些变量const int时,这将与声明5行和缺省初始化std::vector<int>实例7列,使得该2D阵列中的每个元素是最初int类型的空载体的2D阵列。

虽然这就是这样,但并不是说你应该做这样的事情 - 一个2D C风格的std::vector对象是一个奇怪的构造。如果你想要一个固定的矩阵,其中每个元素是std::vector然后使用以下(举例),而不是:

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

感谢您的回复。 – Eman

相关问题