결과 ¶
~cpp
vector1에 100000 번의 입력 을 합니다.
저장 공간 예약은 하지 않습니다.
k: 0, new capacity: 1
k: 1, new capacity: 2
k: 2, new capacity: 4
k: 4, new capacity: 8
k: 8, new capacity: 16
k: 16, new capacity: 32
k: 32, new capacity: 64
k: 64, new capacity: 128
k: 128, new capacity: 256
k: 256, new capacity: 512
k: 512, new capacity: 1024
k: 1024, new capacity: 2048
k: 2048, new capacity: 4096
k: 4096, new capacity: 8192
k: 8192, new capacity: 16384
k: 16384, new capacity: 32768
k: 32768, new capacity: 65536
k: 65536, new capacity: 131072
이제 vector2에 같은 입력을 합니다.
단, 저장 공간의 예약을 수행합니다.(100000).
소스 ¶
~cpp
#include <iostream>
#include <vector>
using namespace std;
/********************************************************/
/* 이 프로그램은 STL Tutorial and Reference Guid 2nd 의 */
/* 6.6 예제 입니다. */
/* 한글화와 주석을 첨부했습니다. */
/* 저작권은 해당 책에 따릅니다. */
/********************************************************/
// 저장할 자료형
class U{
public:
unsigned long id;
U():id(0){}
U(unsigned long x):id(x){}
};
int main()
{
cout << "STL Vecotr의 capacity와 reserve에 대한 함수 수행을 보입니다."
<< endl;
int N = 100000; // vector에 입력될 자료의 size
vector<U> vector1, vector2;
cout << "vector1에 " << N << " 번의 입력 을 합니다. \n"
<< "저장 공간 예약은 하지 않습니다.\n";
int k;
for ( k = 0; k!= N; ++k){
vector<U>::size_type cap = vector1.capacity();
vector1.push_back(U(k));
if( vector1.capacity() != cap )
cout << "k: " << k << ", new capacity: "
<< vector1.capacity() << "\n";
}
vector2.reserve(N);
cout << "\n이제 vector2에 같은 입력을 합니다.\n"
<< "단, 저장 공간의 예약을 수행합니다.(" << N << ").\n";
for ( k = 0; k!= N; ++k){
vector<U>::size_type cap = vector2.capacity();
vector2.push_back(U(k));
// 예약 되어 있으므로, 여기에 진입하지 않습니다.
if ( vector2.capacity() != cap )
cout << "k: " << k << ", new capacity: "
<< vector2.capacity() << "\n";
}
return 0;
}