본문 바로가기

Programming/C++ STL

[C++ STL] vector(동적배열)

동적배열(vector)

동적배열은 배열의 크기를 미리 정하지 않고 자료의 개수가 변함에 따라 배열의 크기가 변경되는 배열이다. 이는 C++에서 배열(정적배열)을 선언 시 배열의 크기를 정해야하는 단점을 보완한 것이다. C++의 STL에서는 vector라는 자료형으로 동적배열이 구현되어 있다.

 

vector가 동적으로 배열을 할당하는 과정을 이해해보자. vector는 맨 뒤쪽에서 삽입과 삭제가 이루어진다. 이렇게 들어간 요소들이 배열의 크기인 vec.size()를 형성한다. 또한 vector자료형은 배열 요소들의 갯수가 증가함에 따라 공간을 점점 늘려가며 할당하므로 배열의 크기보다 더 큰 여유공간을 할당해둔다. 이를 vec.capacity()라고 한다. 벡터가 너무 커져 연속된 메모리를 할당할 수 없을 경우, 다른 메모리로 복사하여 배열을 할당할 수 있다. 아래의 예제를 통해서 벡터에서 자주 쓰이는 함수들을 소개한다.

 

  • 벡터 선언
  • 삽입/삭제
  • 벡터의 각 요소 출력
  • 벡터의 맨 앞, 맨 뒤 요소 출력
  • 벡터 초기화 
#include<iostream>
#include<vector>

using namespace std;

int main() {

	//벡터 선언
	vector<int> a;

	//제일 뒤에 요소 추가
	a.push_back(1);
	a.push_back(2);
	a.push_back(3);

	//맨 뒤의 요소 제거
	a.pop_back();

	//전체 요소 출력
	for (int i = 0; i < a.size(); i++) {
		cout << a[i] << " ";
		cout << a.at(i) << " ";
	}

	cout << endl;

	//첫번째 요소와 마지막 요소 출력
	cout << a.front() << " ";
	cout << a.back() << " ";

	//벡터 초기화
	a.clear();

	return 0;
}

Reference

프로그래밍 대회에서 배우는 알고리즘 문제해결전략, 구종만