std::inplace_vector<T,N>::assign
来自cppreference.com
| |
(1) | (C++26 起) |
| |
(2) | (C++26 起) |
| |
(3) | (C++26 起) |
替换容器的内容。
1) 以
count 份 value 的副本替换内容。2) 以范围
[first, last) 中元素的副本替换内容。3) 以
ilist 的元素替换内容。| 本节未完成 |
参数
| count | - | 容器的新大小 |
| value | - | 用以初始化容器元素的值 |
| first, last | - | 表示要复制的源元素范围的迭代器对 |
| ilist | - | 复制值来源的 std::initializer_list |
复杂度
1) 与
count 呈线性。2) 与
first 和 last 间的距离呈线性。3) 与
ilist.size() 呈线性。异常
1) 当
count > capacity() 时抛出 std::bad_alloc。2) 当
std::ranges::distance(first, last) > capacity() 时抛出 std::bad_alloc。3) 当
ilist.size() > capacity() 时抛出 std::bad_alloc。1-3) 所插入元素的初始化抛出的任何异常。
示例
下列代码用 assign 添加数个字符到 std::inplace_vector<char, 5>:
Run this code
#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
参阅
| 将范围的值赋给容器 (公开成员函数) | |
| 将值赋给容器 (公开成员函数) |