7

ベクトル内の要素、たとえば要素 2 を指しているポインタがある場合、その要素は同じベクトルの要素 4 と交換されます。ポインターは現在、要素 2 を指しているのか、要素 4 を指しているのか、またはどちらも指していないのか? 例:

ベクトル a は [1,2,3,4,5] に
等しい 要素 2 (この場合は 3) を指すポインタを作成します
要素 2 と 4 を入れ替えます
ベクトル a は [1,2,5,4 になりました、3]

ベクトルはどこを指していますか?

4

1 に答える 1

8

「ポインターはどこを指しているの?」という意味です。その場合、以前と同じメモリ内の場所を指し、現在は value によって占められています5

また、スワップとは、2 つの場所の間で値を交換することを意味していると思います。

なんで?

単にポインタがメモリの場所を指しているからです。そこに何が保存されているかは問題ではありません --- それは値かもしれませんし、ガベージかもしれません。(値が何であるかを確認するために)逆参照すると、その場所に格納されている値が返されます。

値を交換したため、その場所の値はそうでは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 の回答を確認してください)。

于 2010-07-07T15:49:01.357 に答える