갓비니

C++ STL (Standard Template Library) 개념 본문

Programming/C++

C++ STL (Standard Template Library) 개념

갓비니 2020. 4. 27. 21:08

0. C++'s Standard Library

1) Entire C standard library

2) I/O stream library (std::cin / std::ciout / stringstreams / fstreams 등)

3) Standard Template Library

4) miscellaneous library (strings, exceptions, allocation 등...)

 

1. STL이란

STL : 자료구조와 Algoritm을 Template로 제공하는 라이브러리

자료구조를 내가 코딩해서 만들지 않아도 사용할 수 있게 해주는 라이브러리이다.

STL은  reference가 아닌 value를 저장한다.

STL을 사용하면 여러가지 copy를 만들게 된다. 만일 이를 원치 않을 경우 포인터를 이용한 wrapper object를 삽입하면 된다.

STL은 std namespace에 작성되어있기 때문에 

 무조건 using namespace std; 를 적어줘야한다!!!!!

 

2. 구성

1) container

다른 object를 저장하는 object로서,

종류에는 list, queue, stack, map, set, vector등이 있다.

i) Sequence containers : vector, deque, list 등 (연속적인 메모리공간에 값을 넣는 것! 인덱스 이용가능)

ii) Associative containers : set, map, multiset, multimap, bitset 등 (키를 이용하여 값을 저장/검색)

iii) Container Adaptors : stack, queue ( 다른 컨테이너를 상속받아 일부만 공개하여 제한)

 

2) iterator

포인터와 비슷. 컨테이너의 원소를 가리키는 기능.

container 내부 데이터를 순회할 수 있는 객체이다.

iterator : ++ (r/w)

const_iterator : ++ (r)

reverse_iterator : -- (r/w)

const_reverse_iterator : -- (r)

 

 

 

반복자에서 사용되는 연산자는

* 현재 위치의 원소 반환

++ 다음 원소의 위치로 반복자가 이동

-- 이전 원소의 위치로 반복자가 이동

= 반복자가 참조하는 원소의 위치를 다른반복자에게 준다.

== / != 두 반복자가 같은 위치를 가리키고 있는가?

 

 

3) algorithm

연산, 검색, 삭제, 정렬 등

 

4) function object

 

5) container adaptor

 

6) allocator

컨테이너의 메모리 할당을 담당

 

 

 

 

 

3. 사용

1) vector - 동적 배열을 이용한 배열 

1
2
3
4
5
6
7
8
9
10
#include<vector>
using namespace std;
 
int main() {
    string S;
    vector<string> vec;
 
}
 
 
 

i) 생성 :

- vector<데이터형> 변수이름;

- vector<string> vec(5) 기본값 0으로 초기화된 5개의 원소를 가진 vector vec 생성

- vector<string> vec(5,2) 기본값 2로 초기화된 원소 5개를 가진 vector vec 생성

- vector<int> vec1(10,5); vector<int> vec1(vec2); --> vec1을 복사해서 생긴 vec2

 

ii) vector끼리는 연산자로 비교가 가능 . ==, != > < 등

 

iii)

- vec.assign(4,1) / 1의 값으로 4개의 원소에 할당해준다.

- vec.at(num) / num번째 원소를 가져온다. 범위를 넘어가면 예외를 내보냄

- vec[num] / num번째 원소를 가져옴. 하지만 점검없이 가져오므로 속도가 빠름

- vec.front() 첫번째 / vec.back() 마지막 / vec/clear() 모든 원소 제거 (메모리는 남아있음. capacity는 남아있다는 뜻)

- vec.push_back(10) 맨 마지막에 10 삽입

- vec.pop_back() 마지막 원소 삭제