2010년 3월 10일 수요일

vector에 관한 고찰


VS에서 지원되는 template 자료구조 중에 vector라는 것이있다.
이것은 얼핏보기에 배열과 매우 흡사하다.

배열은 손쉽고 간단하게 사용할 수 있으나, 유동적으로 크기를 조절할 수가 없다는 문제점이 있다.
데이터크기가 고정적이라면 상관없지만 그렇지 않을 경우에는 데이터크기를 추측하여 배열을 크게 잡는다.
이 과정에서 추측한 데이터 크기보다 배열이 크게 잡혔을 경우, 메모리를 낭비하게 되고,
그 반대의 경우에는 데이터의 손실이 일어나게 된다.

vector는 runtime 중에도 유동적으로 배열의 크기를 조절할 수 있다.
하여 vector는 사용할 때는 배열처럼 간단하게 사용하면서 template 자료구조의 이점을 가진 매우 좋은 녀석이다.
그래서 나는 데이터 크기가 유동적인 것들을 처리할 때 주로 vector를 이용하곤 한다.
list는 너무 복잡하고 자칫 잘못하다가는 pointer를 잘못 처리하여 segmentation error가 나거나 pointer를 잘못 사용하면 runtime error가 나기 쉽상이다.

그런데, 이번에 vector의 치명적인 오류를 알게 되었다.
vector는 데이터가 많이 들어오면 알아서 배열을 늘리고, size 조정도 알아서 하기 때문에 자료의 주소 값이 자꾸 변경된다는 것이다.
주소를 참조해서 쓰고 있는데 자기 맘대로 주소가 바뀌어 버리면 데이타의 손실은 없어도 프로그램 상에서 오류가 생기게 된다.
또한 삭제나 삽입을 할 때도 주소값이 변경된다.
그러나 그 때마다 다시 pointer를 잡아주기란 힘들다..

그래서 나는 vector를 버렸다. T^T

댓글 없음:

댓글 쓰기