стандартный указатель - PullRequest
       5

стандартный указатель

0 голосов
/ 19 декабря 2011

У меня есть один вопрос: что, если у меня есть вектор STL, я могу написать как

std::vector<int> *p;

Но я не могу решить, буду ли я использовать его в любой ситуации?Кроме того, что произойдет с указателем p в этом случае, если я изменю размер вектора, на который указывает указатель, на p?

Я могу показаться глупым, но эти вопросы только что возникли, и я могу скомпилироватьstd::vector<int> *p в г ++.

Ответы [ 2 ]

3 голосов
/ 19 декабря 2011

Говоря:

std::vector *p;

Вы объявляете указатель на вектор. Теперь вам нужно назначить область памяти для хранения содержимого векторного объекта, а не отдельных элементов. После этого вы можете добавлять, удалять, удалять и обновлять отдельные элементы по вашему желанию.

Что касается изменения размера вектора, то с памятью, о которой идет речь, ничего не произойдет, изменится только содержимое этой памяти, связанное с объектом Vector.

Одним из вариантов использования такой структуры является наличие динамического массива Векторов. Скажем, вам нужно вести список узлов смежности, но вы не уверены заранее, сколько узлов появятся до времени выполнения.

0 голосов
/ 19 декабря 2011

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

Относительно вопроса «resize»: так как Подвержены ли векторные указатели resize ()? состояниям, указатель на сам вектор действителен, пока существует вектор. Но указатели на элементы вектора могут измениться. Например:

std::vector<int> v;
std::vector<int> *p;
p = &v; // Does not change

int *pe;
pe = &v[0]; // May change
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...