作用:将值赋给容器
https://cppreference.cn/w/cpp/container/vector/assign
std::vector<T,Allocator>::assign
void assign( size_type count, const T& value ); | (1) | (constexpr 自 C++20 起) |
template< class InputIt > void assign( InputIt first, InputIt last ); | (2) | (constexpr 自 C++20 起) |
void assign( std::initializer_list<T> ilist ); | (3) | (自 C++11 起) (constexpr 自 C++20 起) |
1) 用 count 个 value 的副本替换内容,并重新设置vector长度为count
2) 用范围 [
first,
last)
中的副本替换内容。如果任一参数是 *this 中的迭代器,则行为未定义。//姑且没看懂呢
如果 InputIt 是一个整型,则此重载的效果与重载 (1) 相同。 | (直到 C++11) |
只有当 InputIt 满足 LegacyInputIterator 时,此重载才会参与重载解析。 | (自 C++11 起) |
3) 用来自初始化列表 ilist 的元素替换内容。//用列表替换容器内容,并重新设置vector长度为列表长度
所有迭代器(包括 end()
迭代器)以及对元素的所有引用都将失效。//?,没看懂
参数
count | 容器的新大小 | |
value | 用于初始化容器元素的值 | |
first, last | 要复制元素的范围 | |
ilist | 要复制值的初始化列表 |
复杂度(线性)
1) count 的线性。
2) first 和 last 之间距离的线性。
3) ilist.size() 的线性。
示例
以下代码使用 assign
将几个字符添加到 std::vector<char>
/*
* ClassName: ${NAME}
* package: ${PACKAGE_NAME}
* Description:
* @Author: innno
* @Create: 2024/2/27 - 21:54
* @Version: v1.0
*/
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
vector<char> vec={'a','b','c','a','b','c','a','b','c'};
auto print_vec = [&]()
{
for (const char& c : vec)
{
cout << c << " ";
}
cout << "\n";
};
vec.assign(5, 'a');
print_vec();
vector<char> vec1={'1','2','4','6','9'};
vec.assign(vec1.begin(), vec1.end());
print_vec();
const string extra(6, 'b');
vec.assign(extra.begin(), extra.end());
print_vec();
vec.assign({'C', '+', '+', '1', '1'});
print_vec();
return 0;
}
输出:
