Namespaces
Variants

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

From cppreference.net
std::basic_string
(1)
void reserve ( size_type new_cap = 0 ) ;
(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 요청입니다 (이는 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)