-
[C/C++] STL Vector 사용법프로그래밍/C,C++ 2020. 5. 8. 00:38
Vector
배열과 거의 동일한 기능을 수행하는 자료구조
배열과 마찬가지로 원소가 메모리에 연속하게 저장되어 있기 때문에 O(1) 시간으로 원소에 접근 가능
배열과 다르게 크기를 자유자재로 늘이거나 줄일 수 있다는 장점이 있음 => 가변 배열
그래프의 인접리스트를 구현할 때 많이 사용
vector<int> a; 비어있는 벡터 a 생성 vector<int> a(10); 0으로 초기화 된 크기가 10인 벡터 a 생성 vector<int> a(10,1); 1로 초기화 된 크기가 10인 벡터 a 생성 vector<vector<int> > a; 비어있는 2차원 벡터 a 생성 vector<vector<int> > a(10, vector<int>(10)); 0으로 초기화 된 10x10 2차원 벡터 a 생성 vector<vector<int> > a(10, vector<int>(10,1)); 1로 초기화 된 10x10 2차원 벡터 a 생성 vector<int> a[10] 0으로 초기화 된 벡터 배열 a 생성 // a[0], a[1], a[2] ... a[9] vector<pair<int, int> > g[3] 0으로 초기화 된 페어형 벡터 배열 g 생성 // g[0].push_back({3,5}); == g[0].push_back(make_pair(3,5)); // g[0][0].first == 3 // g[0][0].second == 5 a[0]=make_pair(3,1); pair형 벡터의 원소를 추가하는 다른 방법 a.front(); 첫번째 원소를 참조 a.back(); 마지막 원소를 참조 a.clear(); 모든 원소를 제거(메모리는 남아있음) a.push_back(5); 마지막 원소 뒤에 5를 삽입 a.pop_back(); 마지막 원소를 제거 a.begin(); 첫번째 원소를 가리킴(pointer/iterator) a.end(); 마지막 원소를 가리킴(pointer/iterator) a.erase(a.begin()); 첫번째 원소 제거 a.erase(a.end()); 마지막 원소 제거 a.size(); 벡터의 크기(원소의 개수)를 리턴 a.capacity(); 할당된 공간의 크기를 리턴 a.empty(); 벡터가 비어있으면(a.size==0) true를 리턴 a.erase(unique(a.begin(),a.end()),a.end()); 중복 제거 (정렬 후 사용 필수!) *min_element(a.begin(), a.end()); 벡터에서 최소값을 리턴 *max_element(a.begin(), a.end()); 벡터에서 최대값을 리턴
Vector의 반복문
vector<int> v = {1, 2, 3, 4, 5, 6}; // 1. ranged-based for loop (C++11~) for(int e : v) { cout<<e<<" "; // 1 2 3 4 5 6 } // 2. legacy for loop for(int i = 0; i < v.size(); i++) { cout<<v[i]<< " "; } // 3. !!!WRONG!!! for(int i = 0; i < v.size()-1; i++) { cout<<v[i]<<" "; } // 출처 : https://www.youtube.com/watch?v=mBeyFsHqzHg&t=893s
※ 기본적으로 vector의 size() 메소드는 unsigned int를 반환하기 때문에 3번의 경우 v가 빈 벡터일 때, v.size()-1이 unsigned int 0에서 int 1을 빼는 식이 되고, unsigned int와 int를 연산하면 unsigned int로 자동 형변환이 되기 때문에 결과 값이 -1이 아니라 4294967295가 됨
'프로그래밍 > C,C++' 카테고리의 다른 글
[C/C++] STL Stack, Queue 사용법 (0) 2020.09.22 [C/C++] map 자료구조를 이용한 문자열 문제 해결 (0) 2020.09.02 [C/C++] String 함수 정리 (0) 2020.05.07 if 와 else if의 차이점 (0) 2020.02.29 [C/C++] scanf vs fgets (0) 2020.02.28