std::vector<T,Allocator>::assign
来自cppreference.com
<tbody>
</tbody>
void assign( size_type count, const T& value ); |
(1) | (C++20 起为 constexpr) |
template< class InputIt > void assign( InputIt first, InputIt last ); |
(2) | (C++20 起为 constexpr) |
void assign( std::initializer_list<T> ilist ); |
(3) | (C++11 起) (C++20 起为 constexpr) |
替换容器的内容。
1) 以
count 份 value 的副本替换内容。2) 以范围
[first, last) 中元素的副本替换内容。 其中有任何一个实参是指向
*this 中的迭代器时行为未定义。
|
如果 |
(C++11 前) |
|
此重载只有在 |
(C++11 起) |
3) 以
ilist 的元素替换内容。指代元素的所有迭代器(包括 end() 迭代器)和所有引用均会失效。
参数
| count | - | 容器的新大小 |
| value | - | 用以初始化容器元素的值 |
| first, last | - | 要复制的源元素范围的迭代器对 |
| ilist | - | 复制值来源的 std::initializer_list |
复杂度
1) 与
count 呈线性。2) 与
first 和 last 间的距离呈线性。3) 与
ilist.size() 呈线性。示例
下列代码用 assign 添加数个字符到 std::vector<char>:
运行此代码
#include <vector>
#include <iostream>
#include <string>
int main()
{
std::vector<char> characters;
auto print_vector = [&]()
{
for (char c : characters)
std::cout << c << ' ';
std::cout << '\n';
};
characters.assign(5, 'a');
print_vector();
const std::string extra(6, 'b');
characters.assign(extra.begin(), extra.end());
print_vector();
characters.assign({'C', '+', '+', '1', '1'});
print_vector();
}
输出:
a a a a a
b b b b b b
C + + 1 1
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| LWG 2209 | C++98 | 要求替换操作实现为在移除所有既存元素后插入指定的元素 | 移除该要求 |
参阅
(C++23) |
将范围的值赋给容器 (公开成员函数) |
| 将值赋给容器 (公开成员函数) |