Vector는 C++ 표준 라이브러리(STL)에 있는 컨테이너로 사용자가 손쉽게 사용하기 위해 정의된 class이다. Vector의 가장 큰 장점은 동적으로 원소를 추가할 수 있으며 크기가 자동으로 늘어난다는 점이다. 쉽게 말해 크기가 가변적으로 변하는 배열이라고 할 수 있다. 속도적인 측면에서는 배열에 비해 떨어지지만 메모리를 효율적으로 관리할 수 있다는 장점이 있어 굉장히 많이 사용된다. vector는 배열과 마찬가지로 원소들이 하나의 메모리 블록에 연속하게 저장된다. 그렇기에 원소가 추가되거나 삽입될 때 메모리 재할당이 발생할 수 있고 상당한 부하가 발생하게 된다는 점은 단점으로 꼽힌다.
vector를 생성하면 메모리 heap에 생성되며 동적할당된다.
front() : 첫 번째 원소
back() : 마지막 원소
begin() : 첫번째 위치( 정확히는 첫번째 위치를 가리키는 iterator를 반환한다.)
end() : 마지막 위치( 마지막 위치를 가리키는 iterator를 반환한다.)
size() : 원소의 개수
capacity() : 할당된 공간의 크기
매번 새로운 원소가 들어올 때마다 새로운 메모리가 할당되는 것은 비효율적이다. 그렇기에 vector는 새로운 원소가 벡터에 추가되면 메모리 공간이 추가적으로 할당되는 방식으로 이루어져 있다. 좀 더 정확하게는 capacity가 모자랄 경우 capacity/2 만큼의 capacity를 늘려나가게 된다. 만약 입력될 원소의 개수를 알 수 있다면 reserve를 사용하여 미리 capacity 메모리를 할당해 놓으면 좀 더 효율적으로 vector를 사용할 수 있다.
#include <vector> // vector의 헤더파일
vector<int> v; // int타입 벡터 생성
vector<int> v = {1,2,3}; // int형 벡터 생성 후 1, 2, 3으로 초기화
vector<int> v[10]; // int형 벡터 배열 생성
vector<int> v[] = {{1,2},{3,4}} // int형 벡터 배열 생성(행은 가변이지만 열은 고정)
vector<vector<int>> v; // 2차원 벡터 생성(행과 열 모두 가변)
vector<int> v(5); // 5개의 원소를 0으로 초기화
vector<int> v(5,3); // 5개의 원소를 3으로 초기화
vector<int> v2(v); // 벡터 v를 복사하여 벡터v2 생성
v.push_back(10); // 마지막 위치에 숫자 10 추가
vector<int>::iterator iter = v.begin(); // 벡터의 첫번째 위치로 iterator 생성
iter = v.insert(iter, 2); // 맨 앞에 2를 삽입
iter = v.insert(iter, 2, 3); // 맨 앞에 3을 2개 삽입
iter = v.insert(iter+2, 2, 4); // 2번째부터 4를 2개 삽입
v.pop_back(); // 마지막에 넣은 값 제거
v.erase(vec.begin()+10); // index 10의 값을 제거
v.erase(vec.begin(), vec.begin()+5); // index 0~5의 값을 제거
v.clear(); // 모든 값 제거
v.size(); // 벡터의 원소 갯수
v.capacity(); // vector의 물리적 크기
cout << v[2] << endl;
cout << v.front() << endl;
cout << v.back() << endl;
다른 STL도 동일하게 작용하겠지만
vector<pair<int,int>> vc;
이렇게 사용하면 컴파일 에러가 발생한다.
오퍼레이터 ">>" 와 해당 코드의 ">>" 를 구분하지 못하기 때문.
vector<pair<int,int> > vc;
이렇게 떨어뜨려 작성해야한다.
(주의 사항은 지속적으로 추가될 예정)