vector의 주요 인터페이스와 특징

은 c++ .com 에서 확인하시오

cplusplus.com

int main()
{
	vector<int> v;
	v.push_back(10);
	v.push_back(20);
	v.push_back(30);
	v.push_back(40);
	v.push_back(50);
	
	for (int i = 0; i < v.size(); ++i)
		cout << v[i] << endl;
	return 0;
}

위 코드는 컴파일러 경고가 출력됩니다. 이유는 i < v.size() 에서 i 는 int 이지만 v.size() 는 unsigned int 를 리터나하기 때문이다.

이걸 고치기 위해서는 vector 내에 typedef된 멤버 형식을 사용하는 것이다.

int main()
{
	vector<int> v;
	
	for (vector<int>::size_type i = 0; i < v.size(); ++i)
		cout << v[i] << endl;
	cout << typeid(vector<int>::size_type).name() << endl;
}

vector 는 크기를 반환하는 세 멤버함수 size9), capacity(), max_size() 를 가집니다.

size(): 저장원소의 개수

capacity(): 실제 할당된 메모리의 공간의 크기

max_size(): 컨테이너가 담을 수 있는 최대 원소의 개수

cout << v.size() << endl;
cout << v.capacity() << endl;
cout << v.max_size() << endl;
//출력 결과
10 20 30 40 50
5
6
1073741823

max_size()는 쉽게 이해 할 수 있지만 capacity 를 이해하려면 vector의 특징을 조금 더 이해해야 합니다. size()와 max_size() 는 모든 컨테이너가 가지는 멤버 함수입니다. 하지만, capacity() 는 유일하게 vector 만이 가지는 멤버 함수입니다. vector 는 배열 기반 컨테이너라 capacity 가 차면 이전 메모리의 1/2배로 재할당을 해야되기 때문에 capacity값이 더 큰걸 볼 수 있습니다. 늘리는 메모리 양은 컴파일러 마다 조금씩 다릅니다. 어떤 컴파일러는 두배로 확장하는 컴파일러도 있습니다.

reserve() 함수를 사용해서 메모리를 미리 할당해 둘수 있습니다.

초깃값 지정

vector<int> v2(5, 0); 0 으로 초기화

vector 의 resize()