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; }