Namespaces
Variants

std::vector<T,Allocator>:: shrink_to_fit

From cppreference.net

void shrink_to_fit ( ) ;
(constexpr C++20부터)

사용되지 않는 용량의 제거를 요청합니다.

capacity() size() 로 축소하라는 비구속적 요청입니다. 이 요청이 실제로 이행되는지는 구현에 따라 다릅니다.

재할당이 발생하면 모든 반복자( end() 반복자 포함)와 모든 요소에 대한 참조가 무효화됩니다. 재할당이 발생하지 않으면 어떤 반복자나 참조도 무효화되지 않습니다.

만약 T MoveInsertable std:: vector < T, Allocator > 에 대해 아닐 경우, 동작은 정의되지 않습니다.

(since C++11)

목차

복잡도

컨테이너 크기에 대해 최대 선형입니다.

예외

CopyInsertable T 가 아닌 타입의 이동 생성자가 던지는 예외를 제외하고 다른 예외가 발생하면, 아무런 효과도 발생하지 않습니다.

(C++11부터)

참고 사항

libstdc++에서, shrink_to_fit() 사용할 수 없습니다 C++98 모드에서.

예제

#include <iostream>
#include <vector>
int main()
{
    std::vector<int> v;
    std::cout << "Default-constructed capacity is " << v.capacity() << '\n';
    v.resize(100);
    std::cout << "Capacity of a 100-element vector is " << v.capacity() << '\n';
    v.resize(50);
    std::cout << "Capacity after resize(50) is " << v.capacity() << '\n';
    v.shrink_to_fit();
    std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n';
    v.clear();
    std::cout << "Capacity after clear() is " << v.capacity() << '\n';
    v.shrink_to_fit();
    std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n';
    for (int i = 1000; i < 1300; ++i)
        v.push_back(i);
    std::cout << "Capacity after adding 300 elements is " << v.capacity() << '\n';
    v.shrink_to_fit();
    std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n';
}

가능한 출력:

Default-constructed capacity is 0
Capacity of a 100-element vector is 100
Capacity after resize(50) is 100
Capacity after shrink_to_fit() is 50
Capacity after clear() is 50
Capacity after shrink_to_fit() is 0
Capacity after adding 300 elements is 512
Capacity after shrink_to_fit() is 300

결함 보고서

다음 동작 변경 결함 보고서는 이전에 게시된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 755 C++98 std::vector 에 명시적인 축소 맞춤(shrink-to-fit) 연산이 없었음 제공됨
LWG 2033 C++98
C++11
1. 복잡도 요구사항이 누락됨 (C++98)
2. T MoveInsertable 요구사항을 충족해야 함 (C++11)
1. 추가됨
2. 요구사항 지정됨
LWG 2223 C++98
C++11
1. 참조, 포인터, 반복자가 무효화되지 않음 (C++98)
2. 예외 안전성 보장이 없음 (C++11)
1. 무효화될 수 있음
2. 추가됨

참고 항목

요소의 개수를 반환합니다
(public member function)
현재 할당된 저장 공간에 보관할 수 있는 요소의 개수를 반환합니다
(public member function)