반응형
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++' 카테고리의 다른 글
[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 |
댓글