vector
는 C++ 표준 라이브러리 (STL : Standard Template Library) 에 있는 컨테이너 중 하나다.
동적 배열 구조를 C++로 구현한 것으로, 일반 배열과 다르게 동적이며, 메모리가 연속적이다. 속도 측면에서는 배열에 비해 떨어지지만, 메모리를 효율적으로 관리할 수 있다는 장점이 존재한다.
주로 맨 끝에서 삽입 및 삭제가 일어나는 구조지만, iterator(반복자)
를 이용하여 유연한 추가 및 삭제가 가능하다.
하지만 중간에서 삽입과 삭제가 많은 경우에는 비효율적이니, 이러한 경우에는 list
를 이용하도록 하자. 또한 index를 통하여 바로 접근은 가능하나 탐색에 있어서는 순차적으로 접근해야 하므로 탐색이 잦은 경우에도 vector
사용을 지양하는 것이 좋다.
vector
를 사용하기 위해서는 아래와 같이 header 파일을 include 해준다.
#include <vector>
기본적인 vector
의 선언 및 초기화는 아래와 같다.
// 기본적인 vector 선언
// vector<자료형> 변수이름;
vector<int> v1;
vector<string> v2;
// 아래와 같이 vector의 크기를 미리 정할 수 있음.
// vector<자료형> 변수이름(크기);
vector<int> v3(10);
// 크기를 지정함과 동시에 특정 값으로 초기화가 가능.
// vector<자료형> 변수이름(크기, 초기화값);
vector<int> v4(10, 1);
// 크기를 지정하지 않고 특정 값을 넣어 초기화
vector<int> v5 = {1, 2, 3, 4, 5};
// 2차원 vector
vector<vector<int>> v6;
// 다른 vector를 복사해 vector 생성
vector<int> v7(v1);
vector<int> v7 = v1;
vector
는 가장 뒤에 값을 삽입하거나, iterator
를 이용하여 특정 위치에 값 삽입이 가능하다.
// 가장 뒤에 값 삽입
v.push_back(1);
// iterator 선언 + 초기화
vector<int>::iterator iter = v.begin();
// iterator를 활용해 가장 앞에 값 삽입
iter = v.insert(iter, 1);
// iterator를 활용해 앞에 1을 5개 삽입
iter = v.insert(iter, 5, 1);
가장 끝 값을 간단히 삭제할 수 있으며, iterator
를 활용하여 중간에 있는 값을 삭제할 수 있다.
// 가장 끝 값을 삭제
v.pop_back();
// 앞에서 5번째 값을 제거
v.erase(v.begin() + 5);
// index 0부터 3까지의 값을 제거
v.erase(v.begin(), v.begin() + 3);
// vector 전체 삭제
v.clear();
vector
의 크기는 원소의 개수
, 물리적 크기
로 크게 2가지로 나눌 수 있다. 이에 대한 method는 아래와 같다.
// vector의 원소의 개수
v.size();
// vector의 물리적 크기
v.capacity;
// vector가 비어있는지 확인, 비어있으면 True, 아니면 False
v.empty();
vector
는 index
를 활용하여 간단하게 접근이 가능하며, 첫번째 원소와 마지막 원소를 간단하게 참조할 수 있다.
// 배열과 동일한 방식으로 접근
v[10];
// at method를 활용한 접근
v.at(10);
// 처음 원소와 마지막 원소를 참조
v.front();
v.back();