2016-07-23 5 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, но по-видимому, это должен быть инициализирован «сопзЬ Int» для некоторых других компиляторов, так что я переписать его здесь:

#include <iostream> 
#include <vector> 

using namespace std; 

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

Спасибо.

+1

Я надеюсь, вы понимаете, вы создаете 2D массив векторов (7x9), а не 2D вектор. – rustyx

ответ

4

Будет вызван конструктор 1 из here

На самом деле 63 раз, потому что вы создаете 63 STD :: векторы, а не один 2d вектор.

Он скомпилирует. Но это не должно. У вас здесь VLA. Это недопустимый код C++.

+2

Этот код в порядке. Он создаст 2d-массив из строки = 7 и col = 9 вектора типа rj99999

+0

@ rj99999 первый пример кода недействителен C++. – juanchopanza

+0

Почему, по-вашему, это недопустимо C++? Вы говорите, что переменная была использована для объявления массива? Это вы имеете в виду, то это зависит от компилятора, и код будет компилироваться во многих компиляторах. Попробуйте gcc – rj99999

2

Обратите внимание, что переменные nx и ny должны быть const квалифицированными как массивы переменной длины, не являющиеся стандартными C++.

Но, когда эти изменения переменной в const int, это будет объявить 2D массив с 5 строк и 7 столбцов по умолчанию инициализирован std::vector<int> случаях, таким образом, что каждый элемент массива 2D изначально пустой вектор int типов.

Хотя это и так, это не значит, что вы должны когда-либо делать что-то подобное - 2D-массив C-стиля из std::vector объектов - странная конструкция. Если вы хотите фиксированную матрицу, где каждый элемент является std::vector затем использовать следующую (например) вместо:

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

Спасибо за ответ. – Eman