벡터 사용법

서재혁·2022년 7월 29일
0

C++

목록 보기
6/7

1. Vector란?

Vector는 C++ 표준 라이브러리(STL)에 있는 컨테이너로 사용자가 손쉽게 사용하기 위해 정의된 class이다. Vector의 가장 큰 장점은 동적으로 원소를 추가할 수 있으며 크기가 자동으로 늘어난다는 점이다. 쉽게 말해 크기가 가변적으로 변하는 배열이라고 할 수 있다. 속도적인 측면에서는 배열에 비해 떨어지지만 메모리를 효율적으로 관리할 수 있다는 장점이 있어 굉장히 많이 사용된다. vector는 배열과 마찬가지로 원소들이 하나의 메모리 블록에 연속하게 저장된다. 그렇기에 원소가 추가되거나 삽입될 때 메모리 재할당이 발생할 수 있고 상당한 부하가 발생하게 된다는 점은 단점으로 꼽힌다.

2. 구조

vector를 생성하면 메모리 heap에 생성되며 동적할당된다.

front() : 첫 번째 원소
back() : 마지막 원소
begin() : 첫번째 위치( 정확히는 첫번째 위치를 가리키는 iterator를 반환한다.)
end() : 마지막 위치( 마지막 위치를 가리키는 iterator를 반환한다.)
size() : 원소의 개수
capacity() : 할당된 공간의 크기

size와 capacity가 따로 존재하는 이유

매번 새로운 원소가 들어올 때마다 새로운 메모리가 할당되는 것은 비효율적이다. 그렇기에 vector는 새로운 원소가 벡터에 추가되면 메모리 공간이 추가적으로 할당되는 방식으로 이루어져 있다. 좀 더 정확하게는 capacity가 모자랄 경우 capacity/2 만큼의 capacity를 늘려나가게 된다. 만약 입력될 원소의 개수를 알 수 있다면 reserve를 사용하여 미리 capacity 메모리를 할당해 놓으면 좀 더 효율적으로 vector를 사용할 수 있다.

3. 사용법

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 생성

Vector 값 추가

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개 삽입

Vector 값 삭제

v.pop_back();							// 마지막에 넣은 값 제거
v.erase(vec.begin()+10);				// index 10의 값을 제거
v.erase(vec.begin(), vec.begin()+5);	// index 0~5의 값을 제거
v.clear();								// 모든 값 제거

Vector 크기 구하기

v.size();		// 벡터의 원소 갯수
v.capacity();	// vector의 물리적 크기

Vector 값 출력

cout << v[2] << endl;
cout << v.front() << endl;
cout << v.back() << endl;

4. 백준에서 사용시 주의

다른 STL도 동일하게 작용하겠지만

vector<pair<int,int>> vc;

이렇게 사용하면 컴파일 에러가 발생한다.
오퍼레이터 ">>" 와 해당 코드의 ">>" 를 구분하지 못하기 때문.

vector<pair<int,int> > vc;

이렇게 떨어뜨려 작성해야한다.

(주의 사항은 지속적으로 추가될 예정)

출처: https://coding-factory.tistory.com/596

profile
조금만 더

0개의 댓글