std::vector

김대익·2022년 3월 15일
0

dynamic size array
sequence container
이 vector의 특징인데

dynamic sequence array는 c++을 안다면 array로 구현이 가능하다.

int main() {
	int * numsPtr = new int[5];
    for (int i=0; i<5; i++) {
    	numsPtr[i] = i;
    }
    delete numsPtr;
    
    return 0;
}

numsPtr 포인터가 스택에 만들어지고 힙에 연속적인 메모리공간이 만들어질 것이다.

하지만 delete를 잊으면 memory leak이 일어날 수 있고 제약이 있기 때문에
이 dynamic sequence array 관리해주는 컨테이너가 바로 vector이다.

int main() {
	std::vector<int> nums(5);
    for (int i=0; i<5; i++ {
    	nums[i] = i;
    }
}


메모리에서 보면 vector 객체가 스택에 생기고 힙에 연속적인 메모리공간이 만들어지고
vector 객체가 메모리공간을 가리키게된다

앞의 배열과는 다르게 vector 객체인 nums가 없어질 때 힙의 메모리공간도 리턴되기 때문에 memory leak걱정이 없다.

또한 힙에 연속적인 메모리공간을 initialize하기위해 for문을 사용할 필요없이


처럼 초기화도 가능하다.


vector가 가진 함수로는 size()가 있다.


현재 컨테이너가 가지고있는 원소의 개수를 리턴해준다.


emplace_back()함수는 힙의 연속적인 메모리공간 맨 마지막에 인수로 넣은 값을 넣어 원소를 추가해준다.

pop_back()함수는 마지막 원소를 없애준다


vector를 iterate하는 방법으로는


일반적으로

  • 인덱스 변수를 사용
  • iter를 사용
  • ranged for을 사용

하는 것이 있다.

이중에서 ranged for을 사용하는 것이 가장 안전하고 optimized 되어있다.


vector의 시간복잡도는

  • 랜덤 액세스시 O(1)
  • 원소 마지막에 추가, 삭제시 O(1)
  • 원소 추가, 삭제시 O(n)
    이다.

0개의 댓글