[C++/STL] vector 사용법

Sujung Shin·2022년 11월 13일
0

1. vector란?

Vector(Queue)는 동적배열 구조를 C++로 구현한 것으로 맨 끝에서만 삽입/삭제가 일어나는 구조이다. 일반 배열과 달리 동적으로 크기가 변하고 메모리가 연속적으로 할당되어있기 때문에 자동으로 배열의 크기를 조절할 수 있으며, 객체의 추가 및 삭제가 용이하다는 점에 있다.

중간 데이터를 삭제하고 싶을 경우 Vector의 erase함수를 통해 삭제할 수 있으나, 삭제가 빈번하게 일어나는 경우 Vector보다 Linked List를 사용하는 것이 효율적이다.

2. Vector의 헤더 파일

STL에 정의된 Vector을 사용하기 위해서는

#include <vector> 
vector<data type> 이름;

의 형태로 헤더 파일과 Vector선언을 한다.

3. Vector의 여러가지 생성 방법

1) Vector의 크기를 따로 정하지 않은 경우

vector<int> v;

2) Vector의 크기를 정하는 경우

vector<데이터 타입> 이름(크기);

vector<int> v(10);
vector<string> v2(5);

3) Vector의 크기를 정하고 데이터를 초기화하는 경우

vector<데이터 타입> 이름(크기, 초기화할 상수);
크기가 5인 Vector에 1로 초기화하고 싶은 경우 아래 방법과 같이 선언한다.

vector<int> v(5, 1);

4. Vector의 멤버함수

1. 원소 접근

1) v[idx]

: v[idx]의 형태로 idx번째의 원소를 참조한다.

2) v.at(idx)

: Vector v의 idx번째 원소를 참조한다.

3) v.front(), v.back()

: v.front() - Vector의 첫번째 원소를 참조한다
: v.back() - Vector의 마지막 원소를 참조한다

4) v.begin(), v.end()

: v.begin() : iterator로 접근 시 vector의 맨 첫번째 데이터 위치를 가리킨다.
: v.end() : iterator로 접근 시 vector의 맨 마지막 데이터 위치의 다음을 가리킨다.

2. 삽입/삭제

1) v.push_back(데이터);

벡터 v의 데이터 타입에 맞는 데이터(정수, 문자열, 문자 등등)을 맨 끝에 삽입한다

2) v.pop_back();

벡터 v의 맨 끝 데이터를 삭제한다.

vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.pop_back();

3) v.insert(데이터 위치, 데이터);

벡터 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);

4) v.erase(iter)

반복자인 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);

3. 크기(size) 함수

1) v.size()

현재 벡터 v의 원소 갯수(크기)를 리턴한다.

2) v.capacity()

메모리에 할당된 벡터의 원소 갯수(크기)를 리턴한다.

3) v.resize(n), v.resize(n,10)

v.resize(n) : 벡터를 원래 크기에서 n 크기로 변경한다.
v.resize(n, 10) : 벡터를 크기 n으로 변경하며 데이터를 10으로 초기화한다.

4) v.empty()

벡터 v가 비어있는 지 확인한다.
현재 비어있는 경우 true를, 비어있지 않는 경우 false를 반환한다.

5. for문, iterator로 접근하는 Vector

1) for 문 : 인덱스 기반 원소 접근

다음과 같이 반복문을 선언하여 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

2) Iterator 을 통한 원소 접근

  • 범위 기반 반복문을 통해 벡터 v의 원소를 출력한다.
  • iterator을 통해 v.begin()부터 v.end()까지 원소 출력
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

3) 벡터가 비어있을 때까지 벡터 끝의 원소 출력

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
profile
백문이불여일타

0개의 댓글