본문 바로가기
알고리즘 공부

C++ STL 자료구조 사용하기 (내부 함수 기본 사용법)

by 마루청 2021. 4. 7.
728x90

STL

 

C++에서 기본으로 제공하는 표준 템플릿 라이브러리(Standard Template Library)를 의미한다. 프로그램에 필요한 기본 자료구조와 알고리즘을 제공한다. 예시로 pair, map, list, vector, stack, queue 등이 있다.

 

 

 

Pair

 

두 가지 종류의 값(객체)을 하나의 값으로 묶을 때 사용한다.

#include <utility> 를 사용해 pair 사용    ex) pair<int,int> p;

선언 : pair<type1, type2> p;

값 초기화 : p = make_pair(value1, value2) ;  //value1, value2가 들어간 pair를 만들어 저장한다.

안의 내용값을 사용할 때는 p.first, p.second로 값을 얻을 수 있다.

 

하나의 값으로 인식되기 때문에 편리하다.     ex)좌표값 x,y를 저장

operator도 사용할 수 있고 sort 등도 가능하다. 

 

 

 

Stack

 

Fist In Last Out 방식으로 자료를 저장하는 구조.

#include <stack> 를 사용해 헤더 파일 가져오기

선언 : stack <type> name;       ex)stack<int> s;

삽입 : s.push(value);

삭제 : s.pop(); //이 경우에는 pop 된 원소를 반환받을 수 없다. 삭제만 됨.

값 반환 : s.top(); //가장 위에 있는 원소를 반환. 즉 가장 나중에 들어간 원소가 반환. 삭제X

크기 : s.size();

비었는지 여부 : s.empty();

 

 

 

Queue

 

Fist In FIst Out 방식으로 자료를 저장하는 구조.

#include <queue> 를 사용해 헤더 파일 가져오기

선언 : queue <type> name;      ex)queue<string> q;

삽입 : q.push(value);

삭제 : q.pop(); //이 경우에는 pop 된 원소를 반환받을 수 없다. 삭제만 됨.

값 반환 : q.front(); //가장 먼저 들어간 원소가 반환된다. 삭제되지는 않음.

            q.back(); //가장 나중에 들어간 원소가 반환된다. 삭제되지 않음.

크기 : q.size();

비었는지 여부 : q.empty();

 

 

 

Vector

 

동적으로 사용할 수 있는 배열과 비슷. 동적이기 때문에 배열과 달리 선언 후에 크기를 늘릴 수 있어 편리하게 사용한다.

#include <vector> 를 사용해 헤더 파일 가져오기

선언 : vector <type> name;       ex)vector<int> v = {1, 2, 3}; (초기화까지) vector<int> v(10); (크기 10인 vector 선언)

                                               vector<int> v[10] : int형 vector 10개를 만듬.

                                               vector<int> v(5,3); (5개의 원소를 3으로 초기화하여 선언)

삽입 : v.push_back(value); //마지막 위치에 value 추가

         v.insert(index,value); //index의 위치에 value 추가 해당 index부터 마지막까지 모두 한 칸씩 뒤로 밀려남.

         ex) v.insert(2,10);  v.insert(2,3,10); //이 경우는 2번째 index부터 3개의 10을 추가한다.

삭제 : v.pop_back(); //끝에 있는 값 제거

         v.erase(v.begin()+index); (index 값을 제거) v.erase(v.begin(), v.begin()+value); (사이값 제거)

         v.clear(); //모든 값 제거

 

vector는 중간에 삽입, 삭제가 가능하지만 그럴 경우 그 뒤에 있는 index값이 전부 바뀌기 때문에 주의를 해야한다.

배열은 index값이 유지가 되지만 vector는 그렇지 않다. (*특히 반복문이나 iterator 사용에 주의)

 

값 반환 : 배열과 동일하게 값을 출력할 수 있다. ex) cout << v[1];

             v.front(), v.back() 메서드도 사용 가능.

크기 : v.size(); //원소 개수   v.capacity; //물리적인 전체 크기

비었는지 여부 : v.empty();

 

vector<type>::iterator : 반복자

라이브러리 자료구조를 효과적으로 접근하는데 사용한다. 포인터와 비슷.

활용 예시 - vector 내용 출력하기

 

// vector<int>::iterator iter; //auto를 사용하면 편리함.

for(auto iter = v.begin(); iter !=v.end(); iter++)
    cout << *iter << endl;
728x90

댓글