std::basic_string<CharT,Traits,Allocator>::reserve
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에서 제거됨) |
std::basic_string객체에 알려 저장소 할당을 적절히 관리할 수 있도록 합니다.
- 만약
new_cap가 현재 capacity()보다 크다면, 새 저장소가 할당되고 capacity()는new_cap와(과) 같거나 더 크게 설정됩니다.
|
(C++20까지) |
|
(C++20부터) |
매개변수
| 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) |