이 예제에서는 정수가 하나있는 벡터를 만든 다음 벡터에서 해당 정수를 지 웁니다. 벡터의 크기는 감소하지만 정수는 여전히 존재합니다! 정수가 아직 왜 있습니까? 크기 0의 벡터가 요소를 포함하는 것은 어떻게 가능합니까?C++의 stl 벡터에서 방금 지운 요소에 액세스 할 수있는 이유는 무엇입니까?
#include <vector>
#include <iostream>
using namespace std;
int main(int agrc, char* argv[])
{
vector<int> v;
v.push_back(450);
cout << "Before" << endl;
cout << "Size: " << v.size() << endl;
cout << "First element: " << (*v.begin()) << endl;
v.erase(v.begin());
cout << "After" << endl;
cout << "Size: " << v.size() << endl;
cout << "First element: " << *(v.begin()) << endl;
return(0);
}
출력 :
Before
Size: 1
First element: 450
After
Size: 0
First element: 450
벡터의 끝 (기존에는 삭제되었지만 삭제 된 요소 포함)을 넘어서는 요소에 액세스하려는 것은 정의되지 않은 동작 (예 : 오류)이므로 운이 좋다면 구현이 응용 프로그램을 중단시킬 수 있다는 점에 유의해야합니다. 문제를 디버그하십시오. 이 행동에 전혀 의존 할 수는 없습니다. –
@David : 그렇습니다.하지만이 경우에는 분명하다고 생각할 것입니다. OP는 왜 코어를 버리지 않았는 지 묻고있었습니다. – geekosaur