은 c++ .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 으로 초기화