Namespaces
Variants

std::basic_string<CharT,Traits,Allocator>::reserve

cppreference.net에서 가져옴
 
 
 
std::basic_string
 
void reserve( size_type new_cap = 0 );
(1) (C++20까지)
constexpr void reserve( size_type new_cap );
(C++20부터)
void reserve();
(2) (C++20부터)
(C++20에서 폐기됨)
(C++26에서 제거됨)
1) 크기 변경 계획을 std::basic_string객체에 알려 저장소 할당을 적절히 관리할 수 있도록 합니다.
  • 만약 new_cap가 현재 capacity()보다 크다면, 새 저장소가 할당되고 capacity()는 new_cap와(과) 같거나 더 크게 설정됩니다.
  • 만약 new_cap가 현재 capacity()보다 작다면, 이는 비구속적 축소 요청입니다.
  • 만약 new_cap가 현재 size()보다 작다면, 이는 shrink_to_fit()과 동등한 비구속적 축소 맞춤 요청입니다(C++11부터).
(C++20까지)
  • 만약 new_cap가 현재 capacity()보다 작거나 같다면, 아무 효과가 없습니다.
(C++20부터)
용량 변경이 발생하면, 모든 반복자와 참조(끝 반복자 포함)가 무효화됩니다.
2) 비구속적 축소 맞춤 요청입니다. 이 호출 이후, capacity()는 size()보다 크거나 같은 지정되지 않은 값을 갖습니다.

매개변수

new_cap - 문자열의 새로운 용량

반환값

(없음)

예외

std::length_error 를 발생시킵니다, 만약 new_cap 이 max_size() 보다 큰 경우.

std:: allocator_traits < Allocator > :: allocate ( ) 가 던지는 모든 예외(예: std::bad_alloc 등)를 던질 수 있습니다.

어떤 이유로든 예외가 발생하면, 이 함수는 아무런 효과를 가지지 않습니다( strong exception safety guarantee ).

복잡도

문자열의 size() 크기에 대해 최대 선형입니다.

예제

#include <cassert>
#include <iostream>
#include <string>
int main()
{
    std::string s;
    std::cout << "1) Initially: " << s.capacity() << '\n';
    const std::string::size_type new_cap{101u};
    s.reserve(new_cap);
    assert(s.capacity() >= new_cap);
    std::cout << "2) After reserve(" << new_cap << "): " << s.capacity() << '\n';
    // observing the capacity growth factor
    auto cap{s.capacity()};
    for (int check{}; check != 4; ++check)
    {
        while (cap == s.capacity())
            s += '$';
        cap = s.capacity();
        std::cout << (3) + check << ") Capacity: " << cap << '\n';
    }
//  s.reserve(); // deprecated/removed in C++20/26, use:
    s.shrink_to_fit();
    std::cout << "7) After shrink_to_fit: " << s.capacity() << '\n';
}

가능한 출력:

1) Initially: 15
2) After reserve(101): 101
3) Capacity: 202
4) Capacity: 404
5) Capacity: 808
6) Capacity: 1616
7) After shrink_to_fit: 809

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
LWG 847 C++98 예외 안전성 보장이 없었음 강력한 예외 안전성 보장 추가됨

참고 항목

현재 할당된 저장 공간에 보관할 수 있는 문자 수를 반환합니다
(public member function)
저장된 문자 수를 변경합니다
(public member function)