Vector(Queue)는 동적배열 구조를 C++로 구현한 것으로 맨 끝에서만 삽입/삭제가 일어나는 구조이다. 일반 배열과 달리 동적으로 크기가 변하고 메모리가 연속적으로 할당되어있기 때문에 자동으로 배열의 크기를 조절할 수 있으며, 객체의 추가 및 삭제가 용이하다는 점에 있다.
중간 데이터를 삭제하고 싶을 경우 Vector의 erase함수를 통해 삭제할 수 있으나, 삭제가 빈번하게 일어나는 경우 Vector보다 Linked List를 사용하는 것이 효율적이다.
STL에 정의된 Vector을 사용하기 위해서는
#include <vector>
vector<data type> 이름;
의 형태로 헤더 파일과 Vector선언을 한다.
vector<int> v;
vector<데이터 타입> 이름(크기);
vector<int> v(10);
vector<string> v2(5);
vector<데이터 타입> 이름(크기, 초기화할 상수);
크기가 5인 Vector에 1로 초기화하고 싶은 경우 아래 방법과 같이 선언한다.
vector<int> v(5, 1);
: v[idx]의 형태로 idx번째의 원소를 참조한다.
: Vector v의 idx번째 원소를 참조한다.
: v.front() - Vector의 첫번째 원소를 참조한다
: v.back() - Vector의 마지막 원소를 참조한다
: v.begin() : iterator로 접근 시 vector의 맨 첫번째 데이터 위치를 가리킨다.
: v.end() : iterator로 접근 시 vector의 맨 마지막 데이터 위치의 다음을 가리킨다.
벡터 v의 데이터 타입에 맞는 데이터(정수, 문자열, 문자 등등)을 맨 끝에 삽입한다
벡터 v의 맨 끝 데이터를 삭제한다.
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.pop_back();
벡터 v의 원하는 위치(2)에 데이터(3)을 삽입하고 싶은 경우 v.insert(2,3)으로 선언한다.
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.insert(2,40);
반복자인 iter을 통하여 원소 위치에 접근하여 벡터 v의 데이터를 삭제한다.
v.begin()위치의 데이터를 삭제하고 싶은 경우 아래와 같이 사용한다.
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
auto iter = v.begin();
v.erase(iter);
현재 벡터 v의 원소 갯수(크기)를 리턴한다.
메모리에 할당된 벡터의 원소 갯수(크기)를 리턴한다.
v.resize(n) : 벡터를 원래 크기에서 n 크기로 변경한다.
v.resize(n, 10) : 벡터를 크기 n으로 변경하며 데이터를 10으로 초기화한다.
벡터 v가 비어있는 지 확인한다.
현재 비어있는 경우 true를, 비어있지 않는 경우 false를 반환한다.
다음과 같이 반복문을 선언하여 v[i]의 형태로 원소를 접근할 수 있다.
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
for(int i = 0 ; i < v.size() ; i++) {
cout << v[i] << '\n';
}
[출력 결과]
벡터에 데이터를 삽입한 순서대로 10 20 30 40 이 출력된다.
10
20
30
40
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
for(auto iter : v) {
cout << iter << '\n';
}
for(auto iter = v.begin(); iter < v.end; iter++) {
cout << *iter << '\n';
}
[출력 결과]
벡터에 데이터를 삽입한 순서대로 10 20 30 40 이 출력된다.
10
20
30
40
10
20
30
40
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
while(!v.empty()) {
cout << v.back() << '\n';
v.pop_back();
}
[출력 결과]
벡터에 데이터를 삽입한 순서와는 반대로 40 30 20 10이 출력된다.
40
30
20
10