std::inplace_vector<T,N>::try_emplace_back
template< class... Args >
constexpr std::optional<reference> try_emplace_back( Args&&... args );
|
(C++26 이후) | |
조건부로 T 타입의 객체를 컨테이너 끝에 추가합니다.
size() == capacity()이 true인 경우, 효과가 없습니다. 그렇지 않으면, std::forward<Args>(args)...로 직접 비리스트 초기화된 T 객체를 추가합니다.
반복자나 참조자는 무효화되지 않습니다. 단, end()는 삽입이 발생하면 무효화됩니다.
매개변수
| args | - | 요소의 생성자로 전달할 인수들 |
| 타입 요구사항 | ||
-
T
는
EmplaceConstructible
이어야 하며,
inplace_vector
내에서
std::
forward
<
Args
>
(
args
)
...
로부터 생성 가능해야 합니다.
|
||
반환값
std:: addressof ( back ( ) ) 만약 size ( ) < capacity ( ) 인 경우, nullptr 그렇지 않은 경우.
복잡도
상수.
예외
삽입된 요소의 초기화 과정에서 발생하는 모든 예외. 어떤 이유로든 예외가 발생하면, 이 함수는 아무런 효과도 가지지 않습니다( 강력한 예외 안전성 보장 ).
참고
| 이 섹션은 불완전합니다 이유: 이 API의 목적을 설명하십시오. |
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_inplace_vector |
202603L |
(C++26) | 더 나은 반환 유형 (std::optional<reference> 대신 pointer)을 위한 try_push_back 및 try_emplace_back
|
예제
#include <cassert>
#include <complex>
#include <inplace_vector>
#include <optional>
int main()
{
using namespace std::complex_literals;
using C = std::complex<double>;
using I = std::inplace_vector<C, 3>;
auto v = I{1.0 + 2.0i, 3.0 + 4.0i};
std::optional<C&> c = v.try_emplace_back(5.0, 6.0);
assert(*c == 5.0 + 6.0i);
assert((v == I{1.0 + 2.0i, 3.0 + 4.0i, 5.0 + 6.0i}));
c = v.try_emplace_back(7.0, 8.0); // no space => no insertion
assert(c == std::nullopt);
assert((v == I{1.0 + 2.0i, 3.0 + 4.0i, 5.0 + 6.0i}));
}
참고 항목
|
끝에서 제자리에서 요소를 생성합니다
(public member function) |
|
|
끝에 요소를 추가합니다
(public member function) |
|
|
끝에 요소들의 범위를 추가합니다
(public member function) |
|
|
끝에 요소들의 범위를 추가하려고 시도합니다
(public member function) |
|
|
무조건적으로 끝에서 제자리에서 요소를 생성합니다
(public member function) |
|
|
무조건적으로 끝에 요소를 추가합니다
(public member function) |
|
|
마지막 요소를 제거합니다
(public member function) |
|
|
인수에서 추론된 타입의
std::back_insert_iterator
를 생성합니다
(function template) |