U E D R , A S I H C RSS

STL/Vector Capacity And Reserve

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;
}
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:27:58
Processing time 0.0100 sec