Vector란?
- 크기를 가변적으로 변경할 수 있는 Dynamic Array(동적배열)이다.
- 속도적인 측면에서는, 기존 배열에 비해서 느릴 수 있지만, 메모리 관리에서 이점을 가지고 있다.
Vector 사용법
* 헤더파일
- C++ code에서 vector를 사용하기 위해서는 <vector> header를 include해주어야 한다.
#include <vector>
* 선언 (Declaration)
- 기본적인 vector 선언법
vector<int> v; // empty vector
vector<int> v = {1, 2, 3, 4, 5}; // initialize with {1, 2, 3, 4, 5}
vector<int> v(5); // initialize with {0, 0, 0, 0, 0}
vector<int> v(5, 1); // initialize with {1, 1, 1, 1, 1}
- 아래와 같이 2차원 벡터들을 선언하거나, element를 pair의 값으로 설정할 수도 있다.
- pair의 경우 <utility> header에 포함되어 있으나, <vector> header에도 역시 포함되어 있어 추가적인 header file은 필요없다.
vector<int> v[5]; // 2-dimensional vector
vector<vector<int> v; // 2-dimensional vector
vector<pair<int, char>> v; // store pair<int, char> value
* 사용법
1. vector에서의 위치 지칭 및 vector의 크기 구하기
- vector의 indexing은 기존의 array와 마찬가지로 0부터 시작한다.
vector<int> v = {1, 2, 3, 4, 5};
int front_val = v.front(); // front_val: 1
int back_val = v.back(); // back_val: 5
vector<int>::iterator begin_it = v.begin(); // first element를 가르키는 iterator
vector<int>::iterator end_it = v.end(); // last element 다음을 가르키는 iterator
int v_len = v.size(); // size of vector (5)
int first_val = v[0]; // first_val: 1
int first_val2 = v.at(0); // first_val2: 1
int second_val = v[1]; // second_val: 2
int second_val2 = v.at(1); // second_val2: 2
int last_val = v[4]; // last_val: 5
int last_val2 = v[v_len-1]; // last_val2: 5
int last_val3 = v.at(4); // last_val3: 5
int last_val4 = v.at(v_len-1); // last_val4: 5
2. vector에서의 값 추가 및 삭제
vector<int> v;
/* vector에서의 값 추가 */
v.push_back(3); // v의 맨 뒤에 3을 추가. v: {3}
v.push_back(4); // v의 맨 뒤에 4을 추가. v: {3, 4}
v.push_back(5); // v의 맨 뒤에 5을 추가. v: {3, 4, 5}
v.insert(v.begin(), 2); // v.begin()에 2를 추가. v: {2, 3, 4, 5}
v.insert(v.begin(), 2, 1); // v.begin()에 1을 2번 추가. v: {1, 1, 2, 3, 4, 5}
v.insert(v.begin()+2, 2, 6); // 2번째 element 위치에 6을 2번 추가. v: {1, 1, 6, 6, 2, 3, 4, 5}
/* vector에서의 값 삭제 */
v.pop_back(); // v의 마지막 element를 제거. v: {1, 1, 6, 6, 2, 3, 4}
v.erase(v.begin()+1); // begin(1)+1 = 2번째 원소(index: 1)를 제거. v:{1, 6, 6, 2, 3, 4}
v.erase(v.begin()+1, v.begin()+2); // 2번쨰 원소만을 제거. v: {1, 6, 2, 3, 4}
v.erase(v.begin()+1, v.begin()+3); // 2,3번째 원소를 제거. v: {1, 3, 4}
v.clear(); // v의 모든 element를 제거. v: {}
3. 그 밖에 vector에서 사용되는 유용한 functions
vector<int> v = {1, 2, 3, 4, 5};
long long v_max_size = v.max_size(); // vector가 수용할 수 있는 최대 개수
bool empty_flag = v.empty(); // vector가 비었으면 1, element가 하나라도 있으면 0
v.resize(3); // v의 크기를 3으로 설정. v: {1, 2, 3}
v.resize(5, 7); // v의 크기를 5로 설정하고, 추가 element들은 0으로 초기화. v: {1, 2, 3, 7, 7}
'알고리즘 > 코딩테스트 준비' 카테고리의 다른 글
[C++] STL container들에 대하여 (List, Map, Set, Hash_map) (0) | 2022.05.08 |
---|---|
[C++] String class에 대하여 (string parsing 포함) (0) | 2022.05.08 |
[C++] Algorithm header에 대하여 (0) | 2022.05.08 |