命名空间
变体
操作

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

来自 cppreference.com
< cpp‎ | 容器‎ | 原地向量
 
 
 
 
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) 用范围 [firstlast) 中的副本替换内容。如果任何一个参数都是对 *this 的迭代器,则行为未定义。只有当 InputIt 满足 LegacyInputIterator 时,此重载才参与重载解析。
3) 用来自初始化列表 ilist 的元素替换内容。

内容

[编辑] 参数

count - 容器的新大小
value - 用来初始化容器元素的值
first, last - 要从中复制元素的范围
ilist - 要从中复制值的初始化列表

[编辑] 复杂度

1)count 成线性关系。
2)firstlast 之间的距离成线性关系。
3)ilist.size() 成线性关系。

异常

1) std::bad_alloc,如果 count > capacity()
2) std::bad_alloc,如果 std::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

[编辑] 另请参阅

将一系列值分配给容器
(公有成员函数) [编辑]
将值分配给容器
(公有成员函数) [编辑]