std::inplace_vector<T,N>::assign
来自 cppreference.com
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)
中的副本替换内容。如果任何一个参数都是对 *this 的迭代器,则行为未定义。只有当 InputIt
满足 LegacyInputIterator 时,此重载才参与重载解析。3) 用来自初始化列表 ilist 的元素替换内容。
本节不完整 |
内容 |
[编辑] 参数
count | - | 容器的新大小 |
value | - | 用来初始化容器元素的值 |
first, last | - | 要从中复制元素的范围 |
ilist | - | 要从中复制值的初始化列表 |
[编辑] 复杂度
1) 与 count 成线性关系。
2) 与 first 和 last 之间的距离成线性关系。
3) 与 ilist.size() 成线性关系。
异常
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
[编辑] 另请参阅
将一系列值分配给容器 (公有成员函数) | |
将值分配给容器 (公有成员函数) |