std::inplace_vector<T,N>::assign
来自cppreference.com
< cpp | container | inplace vector
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) 时才会参与重载决议。
|
如果 |
(C++11 前) |
此重载只有在 |
(C++11 起) |
3) 以来自 initializer_list ilist 的元素替换内容。
本节未完成 |
参数
count | - | 容器的新大小 |
value | - | 用以初始化容器元素的值 |
first, last | - | 复制来源元素的范围 |
ilist | - | 复制值来源的 initializer_list |
复杂度
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'); // 重载 (1) std::println("{}", chars); const char extra[3]{'a', 'b', 'c'}; chars.assign(std::cbegin(extra), std::cend(extra)); // 重载 (2) std::println("{}", chars); chars.assign({'C', '+', '+', '2', '6'}); // 重载 (3) std::println("{}", chars); try { chars.assign(8, 'x'); // 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)); // 抛出异常 } catch(const std::bad_alloc&) { std::println("std::bad_alloc #2"); } try { const auto l = {'1', '2', '3', '4', '5', '6'}; chars.assign(l); // 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
参阅
将一个范围的值赋给容器 (公开成员函数) | |
将值赋给容器 (公开成员函数) |