컴퓨터 언어/C++

[C++] C++ 25일차 STL 스탠다드 탬플리트 라이브러리

훈츠 2020. 5. 4. 17:11
반응형

 

안녕하세요. 훈츠입니다. 금일은 STL(Standard Template Library) 에 사용 방법에 대해 포스팅 합니다.

 

STL (Standard Template Library)

  • 컨테이너 : 특정한 타입의 원소(혹은 객체)를 담아 다루기 위한 객체 입니다.
    • 지원 클래스 : list, vector, map, deque, multimap….
    • 코틀린 언어에서도 제공하는 콜렉션 클래스와 같은 개념 입니다.
    • 코틀린의 List, Map, Set ….
  • 클래스 이기 때문에 그안에 함수(알고리즘) 을 사용 할수 있습니다.
    • find, serch, sort, reverse, min, max….
  • 그러므로 프로그래머가 자료 구조와 알고리즘을 알지 못해도 사용할 수 있도록 한 라이브러리 입니다.
  • 표준 STL 은 std namespace 안에 있습니다.

STL 사용법

  • 반복자 (iterator)
    • 컨테이너의 내부 원소를 순회할 수있는 객체이며, 컨테이너의 특정 위치를 나타낸다.
    • 반복자에 사용 되는 멤버 함수
      • begin() : 컨테이너의 첫 번째 위치를 가리키는 반복자.
      • end() : 컨테이너의 마지막 위치를 가리키는 반복자를 반환하며, 이것은 컨테이너의 마지막 원소 '다음의 위치' 를 말한다. 보통 end() 로 반환한 index 값에 -1을 하여 반복문을 실행한다.
    • 반복자에 사용되는 연산자
      • * 연산자  : 지금 현재 위치의 원소를 반환한다.
      • ++ 연산자 : 다음 원소를 가리키는 역활을 한다.
      • -- 연산자 : 이전 원소를 가리키는 역활을 한다. 
      • = 연산자 : 반복자의 참조하는 원소의 위치를 할당한다.
      • ==, != : 두 반복자가 같은 위치인지를 반환하는 연산자이다.
    • 알고리즘 (Algorithm)
      • 컨테이너 객체의 원소를 다루기 위한 여러 알고리즘으로 검색, 정, 수정 등의 역할        
  • STL = 컨테이너 + 반복자 + 알고리즘

 

컨테이너 Vector 와 List 사용법

  • Vector
    • #include <vector> , <list> 를 해 줘야 합니다.
    • vector 는 자신의 원소를 동적 배열을 이용하여 관리한다.
    • vector 는 테이터 추가와 삭제는 빠르지만 삽입은 비교적 늦은 편이다.
    • Vector 는 for 문에 간접 접근이 가능 합니다.
    • List 는 for 문에 간접 접근이 안되어서, iterator 를 이용해서 반복문 실행
      • list <int>::iterator pos;
  • Vector 와 list 멤버 함수
    • size() : 원소의 개수를 반환 하는 함수
    • empty() : 컨테이너가 비어있는지를 알려준다.
    • max_size() : 컨테이너가 가질수 있는 최대 원소의 개수를 반환한다.
    • reserve() : 용량을 재할당하는 함수이다.
    • insert() : 반복자 위치에 데이터를 삽입 한다.
    • push_back() : 큰 부분에 데이터를 추가한다.
    • pop_back() :  마지막 원소를 제거한다.
    • erase() : 반복자 위치의 원소를 제거한다.
    • clear() : 모든 원소를 제거한다.
    • resize() : 원소의 개수를 변경한다.
    • sort() : 오름차순으로 정렬

멤버 함수의 사용법은다음 사이트에서 예제와 같이 참고하시면서 보시면 될것 같습니다.

https://devdocs.io/cpp/header/list

 

 

예제1 코드  (vector )

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <list>
using namespace std;
 
int main()
{
    vector <int> v;
    vector <int>::iterator iter;
 
    cout << "pushback() 함수실행" << endl;
    for (int i = 0; i < 8; i++) {
        v.push_back(i);
    }
 
    cout << "front()함수 실행 : " << v.front() << endl;
    cout << "back()함수 실행 : " << v.back() << endl;
 
    cout << "for문을 인덱스를 이용한 함수실행" << endl;
    for (int i = 0; i < v.size(); i++) {
        cout << v[i] << " ";
    }
    cout << endl;
 
    cout << "for문을 at() 함수를 이용한 함수실행" << endl;
    for (int i = 0; i < v.size(); i++) {
        cout << v.at(i) << " ";
    }
    cout << endl;
 
    cout << "iterator 함수실행" << endl;
    for (iter = v.begin(); iter != v.end(); iter++) {
        cout << *iter << " ";
    }
 
    cout << "empty 함수실행" << endl;
    cout << v.empty() << endl;
    cout << endl;
 
    return 0;
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

 

예제2 코드 ( list 예제 코드)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <list>
using namespace std;
int main()
{
    list <int> l;
    list <int>::iterator liter;
    
    cout << "pushback() 함수실행" << endl;
    for (int i = 0; i < 8; i++) {
        l.push_back(i);
    }
    cout << "front()함수 실행 : " << l.front() << endl;
    cout << "back()함수 실행 : " << l.back() << endl;
 
    cout << "List iterator 함수실행" << endl;
    for (liter = l.begin(); liter != l.end(); liter++) {
        cout << *liter << " ";
    }
 
    cout << "List reverse 함수실행" << endl;
    l.reverse();
    for (liter = l.begin(); liter != l.end(); liter++) {
        cout << *liter << " ";
    }
 
    cout << "List sort 함수실행" << endl;
    l.sort();
    for (liter = l.begin(); liter != l.end(); liter++) {
        cout << *liter << " ";
    }
 
    cout<< "List find 함수실행" << endl;
    int n = 5;
    liter = find(l.begin(), l.end(), n);
    if (liter != l.end()) {
        cout << "find" << endl;
        cout << *liter << endl;
    }
    else {
        cout << "not find" << endl;
    }
 
    return 0;
 
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

 

vector 에 함수와 사용법이 조금 다른부분은 reverse , sort 함수 외 index로 접근을 못하고 iterator로 접근해야하는 부분들이 다릅니다.

 

 

 

 

반응형