STL
STL, Standard Template Library. 한국말로 하면 표준 템플릿 라이브러리입니다. 한국말이라고 하기에도 애매합니다. 크게 몇가지의 컨테이너를 지원하고 그 컨테이너의 메소드, 그리고 컨테이너의 이터레이터(반복자, iterator)를 지원합니다. 하나하나 살펴보겠습니다.
STL Containers
Vector
첫번째로 살펴볼 컨테이너는 벡터입니다. 배열같은데 조금 더 동적으로 사용 가능하다고 합니다. MSDN의 설명을 참고해봅시다.
vector 컨테이너는 배열처럼 동작하지만 필요에 따라 자동으로 증가할 수 있습니다. 임의로 액세스되고 지속적으로 저장되며 길이가 매우 유연하게 조정됩니다. 따라서 vector는 대부분의 응용 프로그램에 대한 기본 시퀀스 컨테이너입니다. 사용할 시퀀스 컨테이너의 종류에 대해 확실히 모르는 경우 벡터를 사용하여 시작합니다.
네 기본적인 컨테이너라고 보시면 됩니다. 제일 많이 볼 컨테이너이기도 할 것입니다.
이 컨테이너를 선언할 때엔 다음과 같이 하면 됩니다.
vector<int> int_vector;
vector<double> double_vector;
vector<string> string_vector;
위와 같이 템플릿을 이용해서 여러 타입의 벡터를 만들 수 있습니다. 그럼 벡터에서 많이 쓰이는 메소드, 이터레이터들을 봅시다.
Vector::begin();
벡터의 맨 첫부분을 가르키는 이터레이터, 즉 포인터를 반환합니다. 위에 있는 그림처럼 첫 원소(vector[0]
)를 가르킵니다. 예시를 들어 봅시다.
int main(void){
vector<int> intVector;
intVector.push_back(0);
intVector.push_back(1);
intVector.push_back(2);
intVector.push_back(3);
cout<<*(intVector.begin());
return 0;
}
이렇게 하면 콘솔에 0이 찍힙니다.
Vector::end();
벡터의 맨 끝을 가르키는 이터레이터를 반환합니다. 위의 그림처럼 맨 뒤의 원소 그 뒤를 가르킵니다. 즉, 맨 끝 원소를 가르키는 이터레이터를 만드려면 vector.end()-1
을 하면 됩니다. 물론 포인터니 사용할 땐 참조 연산자를 사용해야 합니다. 예를 들어봅시다.
int main(void){
vector<int> intVector;
intVector.push_back(0);
intVector.push_back(1);
intVector.push_back(2);
intVector.push_back(3);
cout<<*(intVector.end()-1);
return 0;
}
이렇게 하면 콘솔에 3이 찍혀 나옵니다.
Vector::push_back();
벡터의 맨 끝(vector.end()쪽)에 새 요소를 삽입하고 벡터의 사이즈를 증가시킵니다. 예시 코드를 봅시다.
int main(void){
vector<string> strVector;
strVector.push_back("Alpha");
strVector.push_back("Beta");
strVector.push_back("Chalie");
return 0;
}
이렇게 하면 srtVector
는 다음과 같을 겁니다. ("Alpha", "Beta", "Chalie")
Vector::erase();
벡터의 특정 부분을 삭제합니다. 매개변수가 하나라면 그 요소 하나만 삭제, 두개라면 그 사이의 요소는 모두 삭제합니다. 예시 코드를 봅시다.
int main(void){
vector<int> intVector;
intVector.push_back(0);
intVector.push_back(1);
intVector.push_back(2);
intVector.push_back(3);
intVector.push_back(4);
intVector.push_back(5);
intVector.erase(intVector.begin()+3);
return 0;
}
begin 이터레이터+3, 즉 3번째(base 0) 요소를 삭제해서 intVector
에 남은 값은 (0,1,2,4,5)
가 될 겁니다. 그럼 이번엔 구간 삭제를 해 봅시다.
int main(void){
vector<int> intVector;
intVector.push_back(0);
intVector.push_back(1);
intVector.push_back(2);
intVector.push_back(3);
intVector.push_back(4);
intVector.push_back(5);
intVector.erase(intVector.begin()+1,intVector.begin()+3);
return 0;
}
begin 이터레이터+1 부터 begin 이터레이터+3 전까지(포함하지 않습니다!) 까지 지웁니다. 즉, 1번째, 2번째 요소를 삭제하여 intVector
에 남은 값은 (0,3,4,5)
가 됩니다.
Vector::pop_back();
벡터의 맨 끝에 있는 요소를 삭제합니다. 즉, vector.erase(vector.end()-1)
과 다르지 않습니다.