我有以下的玩具例子:理解的std ::交換兩個指針和std ::向量
#include<iostream>
#include<vector>
int main(){
std::vector<int> a={1, 2, 3};
std::vector<int> b={4, 5, 6};
int* pa = a.data();
int* pb = b.data();
std::swap(pa,pb);
std::cout<<"after std::swap(pa,pb)\n";
std::cout<<"a= "<<a[0]<<" "<<a[1]<<" "<<a[2]<<"\n";
std::cout<<"b= "<<b[0]<<" "<<b[1]<<" "<<b[2]<<"\n";
std::cout<<"pa= "<<pa[0]<<" "<<pa[1]<<" "<<pa[2]<<"\n";
std::cout<<"pb= "<<pb[0]<<" "<<pb[1]<<" "<<pb[2]<<"\n";
std::swap(a,b);
std::cout<<"after std::swap(a,b)\n";
std::cout<<"a= "<<a[0]<<" "<<a[1]<<" "<<a[2]<<"\n";
std::cout<<"b= "<<b[0]<<" "<<b[1]<<" "<<b[2]<<"\n";
std::cout<<"pa= "<<pa[0]<<" "<<pa[1]<<" "<<pa[2]<<"\n";
std::cout<<"pb= "<<pb[0]<<" "<<pb[1]<<" "<<pb[2]<<"\n";
}
交換後會發生什麼(PA,PB)我很清楚,我希望PA點到b .data(),但是在swap(a,b)之後,我希望b.data()現在指向「1 2 3」,但打印出pa [0],pa [1],pa時不是這種情況[2] ...
我不認爲你可以(合法)通過舊的'.data()'指針訪問數據後移動它 –
@appleapple是的,你可以,移動後容器仍處於有效但未定義的狀態 –
@GuillaumeRacicot如果它是未定義狀態,爲什麼老''。data()'指針保持有效? –