본문 바로가기
C++

[C++] - vector 사용법 정리 (STL)

by 개발 고양이 2024. 1. 6.

vector란?

vector란 많이 쓰이는 STL 자료구조 중 하나로, 동적으로 메모리가 할당된 배열이다. 

사용자가 직접 메모리를 동적 할당한 배열 (int* arr = new int[n])과는 달리 요소 수가 증가하거나 감소하면 메모리가 자동으로 늘어나고 줄어들어 메모리를 매우 효율적으로 관리할 수 있다. 또한 일반 배열처럼, 인덱스를 이용하여 모든 위치에 접근이 가능하다.

벡터의 구조


1. 헤더파일

#include <vector>
using namespace std;

 

vector를 사용하기 위해서는 <vector> 헤더파일을 include시켜주어야 한다.

STL vector는 std namespace에 있기 때문에 cout, cin을 사용할 때와 같이 using namespace std;를 추가해주면 편리하다.

 


2. vector 선언하기

1) 기본 선언 방법

vector <데이터 타입> 이름;     ex) vector<int> v;

 

 

2) 크기를 지정하여 선언

vector <데이터 타입> 이름(크기);     ex) vector<int> v(5);

 

 

3) 크기와 초기값을 지정하여 선언

vector <데이터 타입> 이름(크기, 초기값);      ex) vector<int> v(5, 0);

 

 


3. vector 원소 접근하기

v.size(); 벡터 v의 크기 반환
v.front(); 벡터 v의 처음 값 반환
v.back(); 벡터 v의 마지막 값 반환
v[k]; 인덱스 k 위치에 해당하는 값 반환
v.at(k); 인덱스 k 위치에 해당하는 값 반환
v.begin(); 처음 데이터의 위치 (인덱스 값)
v.end(); 마지막 데이터의 다음 위치
(=벡터의 마지막 원소의 인덱스 값 + 1)

 


4. 원소 삽입

v.push_back(n); 벡터 v의 마지막에 n을 삽입
v.insert(v.begin() + k, n); 벡터 v의 인덱스 k 위치에 n을 삽입

insert에서 위치를 지정할 때 v.begin() + k의 형식으로 써야 오류가 나지 않는다!


5.원소 삭제

v.pop_back(); 벡터 v의 마지막 값 삭제
v.erase(v.begin() + k); 벡터 v의 인덱스 k 위치에 해당하는 원소 삭제
v.clear(); 벡터 v의 모든 원소 삭제

마찬가지로 erase에서 위치를 지정할 때 v.begin() + k의 형식으로 써야 오류가 나지 않는다!

 

 


6. iterator를 이용하여 모든 원소 접근 & 출력하기

vector<int> v;

v.push_back(1);	//v의 맨 끝에 1 삽입
v.push_back(2);	//v의 맨 끝에 2 삽입
v.insert(v.begin()+2,3);	//v의 begin위치로부터 2만큼 떨어진 곳에 3 삽입
v.insert(v.begin()+3,4);	//v의 begin위치로부터 3만큼 떨어진 곳에 4 삽입

//방법 1
for (auto it : v) {
	cout << it << "\n";
}

cout << "\n";

//방법 2
for (auto it = v.begin(); it < v.end(); it++) {
	cout << *it << "\n";
}

실행 결과 정상적으로 순서대로 출력되었다.

 

 

for (auto it : v) {
	if(it%2 == 0)
		cout << it << "\n";
}

위와 같이 auto와 iterator를 이용하여 짝수인 원소만 출력하거나, 이 이외에도 다양하게 조건을 걸어 벡터를 활용할 수 있다.