본문 바로가기

Programming/C++

std::vector 의 메소드들 간단 리뷰

std:vector 에는 여러가지 utility method 들이 존재한다.


그 중에서 오늘은 erase 와 size() 를 살펴보기로 한다.


1. std::vector.erase

- erase는 특정 인덱스에 있는 배열의 요소를 제거하는 일을 수행한다.


2. std::vector.size

- vector 안에 있는 원소들의 갯수를 알려준다.


아래 예제를 살펴보자.

std::vector<int> vec;

vec.push_back(1); // vec(1)

vec.push_back(2); // vec(1,2)

vec.push_back(3); // vec(1,2,3)


std::cout << vec.size() << endl; // 3

vec.erase(vec.begin()+1); // vec(1,3)


vector<int>::size_type i = 0;

// 배열의 길이가 재 조정되기 때문에 loop 을 돌면서 배열의 길이가 유효한지 계속 확인할 필요가 있다.

while (i != vec.size()) {

  if (vec[i] % 2 == 0) {

    vec.erase(vec.begin() + 1)

  } else

    ++i;

  }

}


vector 는 이와같이 사용하고, erase 를 수행하게 되면, vector 내부에서는 원소하나를 제거하고 배열의 길이를 재조정한다. (뒤에 있는 모든 배열을 앞으로 옮긴다.) 그러기 때문에 O(n) 의 시간이 소모된다. 그래서 erase 를 사용하기 전에 큰 데이터를 처리하는 지 안 하는지 살펴볼 필요가 있다.


vector 의 size() 는 연산속도가 꽤 빠르기 때문에 위와 같이 while loop 을 돌면서 배열의 길이가 유효한지 확인하는 작업이 많은 overhead 를 발생시키지 않기 때문에 성능저하를 우려할 필요가 없다.