объявление массива векторов в cpp - PullRequest
0 голосов
/ 29 декабря 2018

Я новичок в cpp STL. У меня есть сомнения относительно массива векторов, когда мы объявляем массив векторов, таких как vectors <int> arr[100];, мы можем также сказать, что это двумерная матрица. Но если говорить о двумерных массивах (int prr[100][100]), затем prr[0], затем он напечатает адрес первого массива в 0-й строке. В основном, я хочу спросить, почему мы объявляем vector <int> arr[100], потому что arr[0] также будет хранить адрес массива в 0-м массиве, который мы должны объявить как vector <int*> arr[100] для объявления массива векторов

1 Ответ

0 голосов
/ 29 декабря 2018

Но если мы поговорим о 2-D массивах (int prr[100][100]), то prr[0], тогда он напечатает адрес первого массива в 0-й строке

Это верно для некоторыхэкстент и в некоторых контекстах.

prr[0] - это объект типа int [100] - массив из 100 int с.

В некоторых контекстах prr[0] затухает доуказатель на его первый элемент, однако это не всегда так.

sizeof(prr[0]) будет 100 * sizeof(int).
&prr[0] будет иметь тип int (*)[100), указатель на массив 100 int s ", а не int**.

Напротив,

В основном я хочу спросить, почему мы объявляем vector <int> arr[100], поскольку arr[0] также будет хранить адрес массива в0-й массив мы должны объявить как vector <int*> arr[100] для объявления массива векторов

Нет, arr[0] не будет хранить адрес массива в 0-м массиве.arr[0] имеет тип std::vector<int>.Все просто.В отличие от массива, объект типа std::vector<int> не распадается на указатель на первый элемент объекта в любом контексте.Следовательно, любые дальнейшие сравнения с int* не имеют смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...