Указатель на элемент вектора - PullRequest
7 голосов
/ 07 июля 2010

Если у меня есть указатель, указывающий на элемент в векторе, скажем, элемент 2, и тогда этот элемент заменяется элементом 4 того же вектора. Указатель теперь указывает на элемент 2, элемент 4 или ни на один из них? Пример:

вектор a равен [1,2,3,4,5]
создать указатель, который указывает на элемент 2, который в данном случае равен 3
поменяйте местами элементы 2 и 4
вектор а теперь [1,2,5,4,3]

где вектор указывает на?

1 Ответ

8 голосов
/ 07 июля 2010

Вы имеете в виду «где указатель указывает на?». Если это так, он будет указывать на то же место в памяти, что и раньше, которое теперь занято значением 5.

Кроме того, при обмене я предполагаю, что вы имели в виду обмен значениями между двумя местоположениями.

Почему?

Просто потому, что ваш указатель указывает на область памяти. То, что там хранится, не имеет значения - это может быть значение или мусор. Когда вы разыменовываете его (чтобы увидеть, что это за значение), оно вернет значение, хранящееся в этом месте.

Поскольку вы меняли значения, значение в этом месте равно 5, а не 3, следовательно, указатель все еще указывает на то же место и не изменяет , но значение на месте изменилось .

Пример кода:

// Create the vector
int a[] = {1,2,3,4,5};
int* ptr = &a[2];
// Display original status
std::cout<<"Original Value: "<<*ptr<<std::endl;
std::cout<<"Address: "<<ptr<<std::endl;
// Swap values
std::swap(a[2],a[4]);
// Check 
std::cout<<"New Value: "<<*ptr<<std::endl;
std::cout<<"Address: "<<ptr<<std::endl;

Примечание:

Я использовал массив целых чисел в примере, но если под вектором вы имели в виду std::vector, то же самое будет сохраняться, если не произошло перераспределения (посмотрите этот ответ SO ).

...