Разница между двумя векторами - PullRequest
1 голос
/ 10 октября 2019

С тех пор как я новичок в этом языке, мне трудно понять эти различия.

В чем разница между этими двумя?

vector<int> *ad;

и

vector<int*> ad;

Кроме того, как эти две строки эквивалентны?

vector<int> * ad = new vector<int>[5];

и

vector<int> ad[5];

1 Ответ

3 голосов
/ 10 октября 2019
vector<int> *ad;

объявляет объявление как указатель, тип объявления таков, что его можно назначить для указания на вектор целых чисел. Эти целые числа хранятся по значению в векторе. Вектор «владеет» ими и контролирует время жизни целых чисел. Поскольку объявление не было назначено, оно фактически не указывает на такой вектор (пока) /

vector<int*> ad; 

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

vector<int> * ad = new vector<int>[5];

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

vector<int> ad[5];

объявляет объявление как массив из 5 векторов целых чисел. объявление будет существовать, пока не выйдет за рамки. Векторы будут пустыми.

...