STL/vector ์ capacity ์ reserve ํจ์์ ์
๊ฒฐ๊ณผ ¶
~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;
}










