2016-07-23 58 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

相關問題