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}