[C++/STL]pair, vector
가장 기본적인 STL 컨테이너라고 할 수 있는 pair와 vector에 대해서 먼저 알아보도록 하겠습니다.
이해하기 쉽도록 제 나름대로 정한 정의와 문제를 풀 때의 쓰임새를 알아보고 난 후, 멤버 함수들과 예제를 통해 사용법을 익혀보도록 하겠습니다.
1. pair
이름이 'first', 'second'인 두 개의 변수를 저장할 수 있는 struct
① 이차원 배열의 인덱스
② 이차원 좌표평면에서의 좌표
③ 정점 번호와 해당 정점 번호까지의 최단거리를 묶어서 저장해야 되는 경우
3) 사용법
pair를 사용하기 위해서는 <utility>를 include 해야 합니다.
pair는 다른 컨테이너들에 비해 간단한 구조이기 때문에 멤버 함수가 적습니다. 따라서, 바로 예제를 통해 pair의 기본적인 사용법을 익혀보도록 하겠습니다.
4) 예제
1 2 3 4 5 6 7 8 9 10 11 12 | //pair 선언 pair<int,int> p; pair<char,double> p; //pair 생성 int a = 1, b = 2; pair<int,int> p = make_pair(a,b); pair<int,int> p = make_pair(1,2); //pair의 멤버 변수에 접근 int valA = p.first; int valB = p.second; | cs |
first가 1이고 second가 2인 pair를 만들기 위해, pair<int,int>를 선언한 후에 각 멤버 변수(first, second)를 초기화해주는 것이 아니라 make_pair를 이용해 바로 만들어낼 수 있다는 것을 알아두면 좋을 것 같습니다(예제의 8번째 줄 참고).
2. vector
1) 정의
사이즈가 유동적인 배열
2) 용도
배열을 사용하는 모든 경우
3) 사용법
vector를 사용하기 위해서는 <vector>를 include 해야 합니다.
vector는 특히 많이 사용되는 컨테이너입니다. 그래서, 그만큼 많은 종류의 멤버 함수를 사용하기도 합니다.
편의상 멤버 함수의 적용 대상이 되는 벡터를 v라고 부르도록 하겠습니다.
멤버 함수 | 기능 |
v.size() | v의 사이즈(물리적인 저장 용량이 아닌 원소의 개수)를 리턴 |
v.resize(new_size) | v를 new_size로 사이즈를 바꿔줌 |
v.empty() | v의 사이즈가 0인지 아닌지를 확인 |
v.begin() | |
v.end() | v의 마지막 원소를 가리키는 iterator 리턴 |
v.front() | v의 0번째 원소를 리턴 |
v.back() | v의 마지막 원소를 리턴 |
v.push_back(val) | v의 끝에 val을 추가 |
v.pop_back() | v의 마지막 원소를 삭제 |
v.clear() | v의 모든 원소를 삭제 |
cf 1) <algorithm>에 있는 reverse()를 이용하면, vector에 속한 원소들의 순서를 거꾸로 뒤집을 수가 있습니다.
만약 원래의 vector가 1 5 2 3 였다면 reverse()한 결과는 3 2 5 1 이 됩니다.
사용법 : reverse(v.begin(), v.end());
cf 2) <algorithm>에 있는 sort()를 이용하면, vector에 속한 원소들을 오름차순으로 정렬할 수 있습니다.
만약 원래의 vector가 1 5 3 4 였다면 sort()한 결과는 1 3 4 5 가 됩니다.
사용법 : sort(v.begin(), v.end());
덧) 오름차순 뿐만 아니라 다른 정렬 기준으로도 정렬할 수 있으며, int로 이루어진 vector뿐만 아니라 다른 자료형으로 이루어진 vector도 정렬할 수 있습니다.
4) 예제
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 | vector<int> iv; vector<pair<int,int>> pv; //사이즈가 3인 vector 생성 vector<int> myv(3); //사이즈가 N(5)이고, 각 원소가 2로 초기화된 vector 생성 int N = 5; vector<int> myv(N, 2); //vector에 원소 추가 iv.push_back(1); // iv : 1 iv.push_back(2); // iv : 1 2 iv.push_back(3); // iv : 1 2 3 pv.push_back(make_pair(2,4)); //vector의 size 조정 iv.resize(4); cout << iv.size(); // 4 cout << iv.front(); // 1 cout << iv.back(); // 0 (resize를 4로 했기 때문에 마지막 원소는 자동적으로 0으로 초기화됨) iv.pop_back(); // iv : 1 2 iv.clear(); // iv : | cs |