본문 바로가기
프로그래밍 언어/C++

[C++] STL capacity와 size 함수 차이

by 까망 하르방 2025. 1. 13.
반응형

capacity > size 메모리 추가 작업이 빠르게 원소를 할당할 수 있다.

capacity 개념이 왜 있는 것일까?

 

clear()는 메모리 공간을 제거하지 않고 size 값만 0으로 만든다

resize(0)과 동일하다.

 

Q) v1, v2 중에 어떤 것이 더 빠를까?

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	int count = 100000;
	vector<int> v1;
	
	for (int i = 0; i < count; ++i)
	{
		v1.push_back(i);
	}

	// -----------------------------

	vector<int> v2;
	v2.reserve(count);
	for (int i = 0; i < count; ++i)
	{
		v2.push_back(i);
	}
}

 

 

비교하기에는 count 수치가 작긴 하지만..

capacity 잡지 않고 push_back 하는 것과

resize로 capacity 확보한 다음 push_back 하는 것인데

메모리 공간이 여유롭다면 미리 공간을 잡아두는 것이 빠를 것이다.

 

 

• reserve(): capacity 변경 (capacity >= size)

clear(): capacity 변경 X, size 변경 O

resize(): 인자에 따라 capacity, size 변경

#include <iostream>
#include <vector>

using namespace std;

void info(const vector<int>& v)
{
	printf("capacity: %d, size : %d\n", v.capacity(), v.size());
}

int main()
{
	vector<int> v1;    // capacity = 0, size = 0
	info(v1);

	vector<int> v2(4); // capacity = 4, size = 4
	info(v2);

	v2.clear();        // capacity = 4, size = 0
	info(v2);

	v2.resize(0);      // capacity = 4, size = 0
	info(v2);

	v2.resize(3);      // capacity = 4, size = 3
	info(v2);

	v2.resize(10);      // capacity = 10, size = 10
	info(v2);
}

 

 

shrink_to_fit() 함수로

size에 맞춰서 capacity 변경할 수도 있다.

#include <iostream>
#include <vector>

using namespace std;

void info(const vector<int>& v)
{
	printf("capacity: %d, size : %d\n", v.capacity(), v.size());
}

int main()
{
	vector<int> v(4);  // capacity = 4, size = 4
	info(v);

	v.resize(1);       // capacity = 4, size = 1
	info(v);

	v.shrink_to_fit(); // capacity = 1, size = 1
	info(v);
}

 

 

📌 [C++] [STL] Vector 사용 방법

 

[C++] [STL] Vector 사용 방법

Vector 동적으로 원소를 추가하고 크기를 자동으로 늘려준다.C++ 표준 라이브러리(STL) → #include  - front() : 첫 번째 원소- back() : 마지막 원소- begin() : 첫번째 위치- end() : 마지막의 다음 위치- size()

zoosso.tistory.com

반응형

'프로그래밍 언어 > C++' 카테고리의 다른 글

[C++] 후위 반환 타입 (suffix return type)  (1) 2025.01.15
[C++] 함수 삭제 function delete  (0) 2025.01.14
[C/C++] extern 키워드  (0) 2025.01.12
[C/C++] 함수 template  (0) 2025.01.11
[C/C++] 문자열 String  (0) 2025.01.10

댓글