[STL]기초, 컨테이너(vector, deque, list)

프로그래밍/C/C++ 2014. 2. 9. 03:06

STL이란 무엇인가?

STL이란 C++언어의 "표준 템플릿 라이브러리" Standard Template Library 약자입니다. STL을 간단하
게 말하자면 일반적으로 많이 사용되는 자료구조와 알고리즘을 모은 라이브러리입니다.

 

 

STL은 대부분 알고있는 자료구조와 알고리즘을 제공합니다.

 

컨테이너(Container) 에서는 시퀀스 컨테이너(sequence container)와 정렬 연관 컨테이너가 있습니다.

시퀀스 컨테이너는 Vector, List, Deque 가 있고, 정렬 연관 컨테이너는 Set, Multiset, Map, Multimap이 있습니다.

시퀀스 컨테이너는 index들의 동일한 형식의 객체들이 선형적으로 연결되어 있습니다.

 

 

▶ 시퀀스 컨테이너의 멤버함수

assign

특정 원소로 채운다

clear

모든 원소를 지운다 

swap

두개의 컨테이너 원소를  바꾼다

empth

아무것도 없으면 true 반환 

begin

첫번째 원소의 반복자 반환 

front 

첫 번째 원소의 참조를 반환 

end

마지막 원소의 반복자 반환 

 back

마지막 원소의 참조를 반환 

 rbegin

역방향의 첫번째 원소 반복자 반환 

 rend

역방향의 마지막 원소 다음의 반복자를 반환 

 size

원소의 개수를 반환 

 reserve

지정된 크기만큼의 공간을 확보 

 resize

컨테이너가 담을수 있는 개수를 지정 

push_back 

마지막에 원소를 추가 

 pop_back

마지막 원소를 삭제 

 insert

특정 위치에 원소를 삽입 

 erase

특정 위치의 원소나 지정범위 삭제 

 

▶ 시퀀스 컨테이너의 선언과 초기화

디폴트 생성자 : deque<int>myD;

원소의 개수를 지정 : deque<int>myD(10);

원소의 개수와 값을 초기화 : deque<int>myD(10, 3);

 

▶ STL-Vector

 선형 구조의 가변 배열 방식입니다.

 동일한 형식의 객체를 계속 넣을수 있습니다.

 요소의 개수에 따라 자동으로 메모리 관리를 합니다.

 

☞ vector 예제

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

▶ STL-Deque

 deque는 double ended queue의 줄임말입니다.

 두개의 key를 두어 앞과 뒤를 관리하여, FIFO와 LIFO를 모두 사용할수 있습니다.

 

Vector와 Deque의 단점은 중간의 삽입과 삭제를 수행시 데이터 이동이 있다는 것입니다.(일종의 행렬)

    삽입과 제거가 빈번한 알고리즘에서는 벡터보다는 리스트를 쓰는것이 좋습니다.

 

▶ STL-List

 각 노드는 링크(포인터)로 연결되어 있습니다.

 iterator(반복자)를 사용해 탐색이 가능합니다.

 ☞ List의 단점은 중간에 원소에 접근이 불가능하고, 탐색시 처음부터 검색해야 한다는 점입니다. 

     탐색이 많은 경우 List보다는 Vector혹은 Deque를 쓰는것이 좋습니다.

 

   <List의 탐색>

     List<int>::iterator itr;

     for(itr = myList.begin(); itr != myList.end(); itr++)

     cout << *itr;

 

 List는 sort(정렬)을 지원합니다. [qsort사용불가]

     List.sort(); //오름차순 정렬

     List.sort(greater<T>()); //내림차순 정렬