반응형
안녕하세요. 훈츠입니다. 금일은 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
|
//Hoons Blog---https://rain2002kr.tistory.com------------------------------------------------------------------코드///
#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
|
//Hoons Blog---https://rain2002kr.tistory.com------------------------------------------------------------------코드///
#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로 접근해야하는 부분들이 다릅니다.
'컴퓨터 언어 > C++' 카테고리의 다른 글
[C++] C++ 28일차 파일 입출력 3 검색 seekg and seekp (0) | 2020.05.12 |
---|---|
[C++] C++ 26일차 파일 입출력1 (0) | 2020.05.05 |
[C++] C++ 24일차 Template 3 클래스 객체 활용 (0) | 2020.05.01 |
[C++] C++ 21일차 friend 변수와 friend 클래스 (0) | 2020.04.25 |
[C++] C++ 20일차 static(정적) 멤버변수와 static(정적) 함수 (0) | 2020.04.24 |