Namespaces
Variants

std::inplace_vector<T,N>::try_emplace_back

출처: ko.cppreference.net
 
 
 
 
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 그렇지 않은 경우.

복잡도

상수.

예외

삽입된 요소의 초기화 과정에서 발생하는 모든 예외. 어떤 이유로든 예외가 발생하면, 이 함수는 아무런 효과도 가지지 않습니다( 강력한 예외 안전성 보장 ).

참고

기능 테스트 매크로 값 표준 기능
__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)