2016-07-08 87 views
0

我是STL的新手,我無法理解向量的這種奇怪行爲。 在編寫問題的代碼時,我使用了兩種類型的向量pair<int,int>向量聲明

第一:

int n,m; 
cin>>n>>m; 
vector<pair<int,int> > v[n*m]; 

二:

int n,m,size; 
cin>>n>>m; 
size=n*m; 
vector<pair<int,int> > v[size]; 

如果觀察到,第一個是不給所需要的結果,而第二類給了我正確的結果。

這兩種類型是否有區別。如果是,有什麼區別?

+0

你正在創建的std ::向量的'原始陣列<性病::對>''N * M'和'大小「。你可能不想要這個。 – erip

+4

這兩個示例都不是標準的C++,因爲您無法使用運行時值聲明數組來確定項目數。 [看到此](http://rextester.com/EAVG29207) – PaulMcKenzie

+0

嘗試查看您的帖子在提問時的預覽。 @NathanOliver善意地使用代碼塊編輯您的文章,但是在使用外部代碼塊(被解釋爲HTML標籤)的'<' and '>'之前,它幾乎不可讀。 – Holt

回答

1

這些都不應該工作(甚至編譯),因爲你正在申報爲「動態」(運行)大小局部數組:

size_t x = 34; 
int y[x]; // Error! 

您的代碼不會被宣佈含有K向量的數組什麼(vector<pair<int,int>> ),而你可能想要的是大小K的矢量:大小

int n, m; 
cin >> n >> m; 
vector<pair<int,int> > v(n * m); 
+0

雖然你說的是真的,爲什麼還要在那裏在支持作爲擴展的VLA的平臺上,兩者有什麼不同? –

+0

@Holt我已經嘗試了這兩個代碼,他們正在工作,但我無法弄清楚這兩者之間的區別。我使用在線Ideone編譯器與C++ 14. @ PaulMcKenzie – Abhinav1602