std::basic_string<CharT,Traits,Allocator>:: reserve
| (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에서 제거됨) |
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) |