C++官网参考链接:https://cplusplus.com/reference/deque/deque/assign/
公有成员函数
<deque>
std::deque::assign
C++98
范围 (1)
template <class InputIterator> void assign (InputIterator first, InputIterator last);
填充 (2)
void assign (size_type n, const value_type& val);
C++11
范围 (1)
template <class InputIterator> void assign (InputIterator first, InputIterator last);
填充 (2)
void assign (size_type n, const value_type& val);
初始化列表 (3)
void assign (initializer_list<value_type> il);
分配容器内容
向deque容器分配新内容,替换其当前内容并相应地修改其size。
C++98
在范围版本(1)中,新内容是由first和last范围中的每个元素以相同的顺序构造的元素。
在填充版本(2)中,新内容是n个元素,每个元素初始化为val的一个副本。
如果需要,容器使用它的内部分配器(internal allocator)来分配额外的存储空间。
C++11
在范围版本(1)中,新内容是由first和last范围中的每个元素以相同的顺序构造的元素。
在填充版本(2)中,新内容是n个元素,每个元素初始化为val的一个副本。
在初始化列表版本(3)中,新内容是作为初始化列表传递的值的副本,顺序相同。
如果存储发生变化,则使用内部分配器(internal allocator)(通过其特性(traits))。它也被用来销毁(destroy)所有现有的元素,并构造(construct)新的元素。
调用之前容器中保存的任何元素都将被销毁并替换为新构造的元素(不发生元素赋值)。
形参
first,last
输入迭代器到序列的初始和最终位置。使用的范围是[first,last),它包括first和last之间的所有元素,包括由first指向的元素,但不包括由last指向的元素。
函数模板实参InputIterator应该是一个输入迭代器(input iterator)类型,它指向可以构造value_type对象的类型元素。
n
容器的新大小。
成员类型size_type是无符号整型。
val
值来填充容器。容器中的n个元素都将初始化为该值的副本。
成员类型value_type是容器中元素的类型,在deque中定义为其第一个模板形参(T)的别名。
il
一个initializer_list对象。编译器将从初始化列表声明器自动构造此类对象。
成员类型value_type是容器中元素的类型,在deque中定义为其第一个模板形参(T)的别名。
返回值
没有返回值。
用例
// deque::assign
#include <iostream>
#include <deque>
int main ()
{
std::deque<int> first;
std::deque<int> second;
std::deque<int> third;
first.assign (7,100); // 7 ints with a value of 100
std::deque<int>::iterator it;
it=first.begin()+1;
second.assign (it,first.end()-1); // the 5 central values of first
int myints[] = {1776,7,4};
third.assign (myints,myints+3); // assigning from array.
std::cout << "Size of first: " << int (first.size()) << '\n';
std::cout << "Size of second: " << int (second.size()) << '\n';
std::cout << "Size of third: " << int (third.size()) << '\n';
return 0;
}
输出:
复杂度
在初始和最终的sizes(析构、构造)中的线性。
迭代器有效性
与此容器相关的所有迭代器、指针和引用都将失效。
数据竞争
所有复制的元素都被访问。
容器被修改。
所有包含的元素都被修改。
异常安全
基本保证:如果抛出异常,则容器处于有效状态。
如果元素构造的适当实参不支持allocator_traits::construct,或者由[first,last)指定的范围无效,则会导致未定义的行为。