Разница между вектором <int> V [] и вектором <vector <int>> V

vector <int> V[] и vector< vector<int> > V оба являются 2D-массив.

Но что такое разница между их и где мы используем это в другом месте? Пожалуйста, дайте краткое объяснение.

Ответы

Ответ 1

vector<int> V[] - это массив векторов.

vector< vector<int> > V - вектор векторов.

Использование массивов - это кодирование в стиле C, использование векторов - это кодирование в стиле С++.

Цитата cplusplus.com,

Векторы представляют собой контейнеры последовательностей, представляющие массивы, которые могут изменять размер.

Подобно массивам, векторы используют смежные места хранения для своих элементов, что означает, что их элементы также можно получить, используя смещения на обычных указателях на его элементы, а так же эффективно как в массивах. Но, в отличие от массивов, их размер может изменяться динамически, при этом их хранение обрабатывается автоматически контейнером.

TL; DR:

Если вы хотите работать с фиксированным числом элементов std::vector, вы можете использовать vector <int> V[].

Если вы хотите работать с динамическим массивом std::vector, вы можете использовать vector< vector<int> > V.

Ответ 2

Одно из отличий заключалось бы в том, что хотя оба варианта могут быть инициализированы одинаково, например,

vector<int> V1[]        {{1,2,3}, {4,5,6}};
vector<vector<int>> V2  {{1,2,3}, {4,5,6}};

и доступ к

cout << V1[0].back() << endl;
cout << V2[0].back() << endl;

V1 не может расти. Вы не можете сделать V1.push_back (...) не своим векторным объектом. Его просто массив. Второй - динамический. Вы можете вырастить его, как вам угодно.

Ответ 3

vector V [] - это только фиксированный массив; и вы можете добавлять/изменять только до верхнего предела. Он не является само по себе и поэтому имеет фиксированный размер. Однако вектор < вектоp > V - динамический вектор, и его размер может быть увеличен динамически.