Если у меня есть указатель, который указывает на элемент в векторе, скажите элемент 2, и затем что элемент подкачивается с элементом 4 из того же вектора. Указатель теперь указывает на элемент 2, элемент 4, или ни один? Пример:
векторизуйте равного [1,2,3,4,5]
создайте указатель, который указывает на элемент 2, который равен 3 в этом случае
элементы подкачки 2 и 4
векторизуйте теперь [1,2,5,4,3]
где вектор указывает?
Вы имеете в виду, «куда указывает указатель?». В этом случае он будет указывать на то же место в памяти, что и раньше, которое теперь занято значением 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 ).