나는 다음과 같은 장난감의 예를 가지고 :이해 표준 : 스왑
스왑 후 어떻게됩니까#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(), 스왑 (a, b) 후, 나는 b.data()가 "1 2 3"을 가리킬 것으로 예상하지만, pa [0], pa [1], pa [2] ...
이동 후 이전'.data() '포인터를 통해 데이터에 액세스 할 수 있다고 생각하지 않습니다. –
@appleapple 예, 컨테이너가 아직 유효하지만 아직 정의되지 않은 상태입니다. –
@GuillaumeRacicot 그것이 정의되지 않은 상태라면, 왜 오래된 것입니까?data()'포인터는 유효하게 유지됩니까? –