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 를 발생시키지 않기 때문에 성능저하를 우려할 필요가 없다.
'Programming > C++' 카테고리의 다른 글
C/C++ static 관련 좋은 글 (0) | 2012.11.26 |
---|---|
Difference between static and global variable in C language (0) | 2012.11.26 |
The complete guide to C++ String (0) | 2012.11.26 |
C++ header file 작성 요령 (0) | 2012.11.26 |
int 를 string 으로 바꾸어 주는 함수 (0) | 2012.11.26 |