Namespaces
Variants

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

From cppreference.net

constexpr void assign ( size_type count, const T & value ) ;
(1) (C++26부터)
template < class InputIt >
constexpr void assign ( InputIt first, InputIt last ) ;
(2) (C++26부터)
constexpr void assign ( std:: initializer_list < T > ilist ) ;
(3) (C++26부터)

컨테이너의 내용을 대체합니다.

1) 내용을 count 개의 value 복사본으로 대체합니다.
2) 내용을 해당 범위에 있는 요소들의 복사본으로 대체합니다 [ first , last ) .
이 오버로드는 다음 조건에서만 오버로드 해결에 참여합니다: InputIt LegacyInputIterator 요구 사항을 만족하는 경우에만.
만약 first 또는 last * this 에 대한 반복자인 경우, 동작은 정의되지 않습니다.
3) 내용을 ilist 의 요소들로 대체합니다.

목차

매개변수

count - 컨테이너의 새로운 크기
value - 컨테이너 요소를 초기화할 값
first, last - 복사할 요소들의 소스 범위 를 정의하는 반복자 쌍
ilist - std::initializer_list 에서 값을 복사할

복잡도

1) count 에 선형적입니다.
2) first last 사이의 거리에 선형적으로 비례합니다.
3) ilist. size ( ) 에 선형적입니다.

예외

1) std::bad_alloc , 만약 count > capacity ( ) 인 경우.
2) std::bad_alloc , 만약 ranges:: distance ( first, last ) > capacity ( ) .
3) std::bad_alloc , 만약 ilist. size ( ) > capacity ( ) .
1-3) 삽입된 요소들의 초기화 과정에서 발생하는 모든 예외.

예제

다음 코드는 assign 을 사용하여 여러 문자를 std:: inplace_vector < char , 5 > 에 추가합니다:

#include <inplace_vector>
#include <iterator>
#include <new>
#include <print>
int main()
{
    std::inplace_vector<char, 5> chars;
    chars.assign(4, 'a'); // overload (1)
    std::println("{}", chars);
    const char extra[3]{'a', 'b', 'c'};
    chars.assign(std::cbegin(extra), std::cend(extra)); // overload (2)
    std::println("{}", chars);
    chars.assign({'C', '+', '+', '2', '6'}); // overload (3)
    std::println("{}", chars);
    try
    {
        chars.assign(8, 'x'); // throws: count > chars.capacity()
    }
    catch(const std::bad_alloc&) { std::println("std::bad_alloc #1"); }
    try
    {
        const char bad[8]{'?'}; // ranges::distance(bad) > chars.capacity()
        chars.assign(std::cbegin(bad), std::cend(bad)); // throws
    }
    catch(const std::bad_alloc&) { std::println("std::bad_alloc #2"); }
    try
    {
        const auto l = {'1', '2', '3', '4', '5', '6'};
        chars.assign(l); // throws: l.size() > chars.capacity()
    }
    catch(const std::bad_alloc&) { std::println("std::bad_alloc #3"); }
}

출력:

['a', 'a', 'a', 'a']
['a', 'b', 'c']
['C', '+', '+', '2', '6']
std::bad_alloc #1
std::bad_alloc #2
std::bad_alloc #3

참고 항목

컨테이너에 값들의 범위를 할당합니다
(public member function)
컨테이너에 값을 할당합니다
(public member function)