std::
list::assign
公众成员函数 <list>
C++98
C++11
C++98
range (1)
template <class InputIterator>
void assign (InputIterator first, InputIterator last);
fill (2)
void assign (size_type n, const value_type& val);
C++11
range (1)
template <class InputIterator>
void assign (InputIterator first, InputIterator last);
fill (2)
void assign (size_type n, const value_type& val);
initializer list (3)
void assign (initializer_list<value_type> il);
将新内容分配给容器
将新内容分配给容器,替换其当前内容,并相应地修改其大小。
C++98
C++11
C++98:
在range版本(1)中,新内容是由first和last之间范围内的每个元素以相同的顺序构造的元素。
在fill版本(2)中,新内容是n个元素,每个元素初始化为val的一个副本。
分配元素所需的任何存储都是使用内部分配器分配的。
在调用之前容器中保存的所有元素都被销毁,并被新构造的元素替换(没有对元素进行赋值)。
C++11:
在range版本(1)中,新内容是由first和last之间范围内的每个元素以相同的顺序构造的元素。
在fill版本(2)中,新内容是n个元素,每个元素初始化为val的一个副本。
在初始化器列表版本(3)中,新内容是作为初始化器列表传递的值的副本,顺序相同。
如果存储中有更改,则使用内部分配器(通过其特性)。它还可以用来销毁所有现有的元素,并构建新的元素。
在调用之前保存在容器中的任何元素要么被赋值,要么被销毁。
☲ 参数
first, last
输入指向序列初始和最终位置的迭代器。
使用的范围是[first,last],它包括first和last之间的所有元素,
包括first指向的元素,但不包括last指向的元素。
函数模板实参InputIterator应该是一个输入迭代器类型,
它指向可以构造value_type对象类型的元素。
n
容器的新大小。
成员类型size_type是一个unsigned整型。
val
要填充容器的值。容器中的每个元素都将被初始化为该值的一个副本。
成员类型value_type是容器中元素的类型,在list中定义为它的第一个模板形参(T)的别名。
il
一个初始化列表对象。编译器将自动从初始化列表声明符构造此类对象。
成员类型value_type是容器中元素的类型,在 list中定义为其第一个模板形参(T)的别名。
☉ 返回值
none
☣ 示例
// list::assign
#include <iostream>
#include <list>
int main ()
{
std::list<int> first;
std::list<int> second;
first.assign (7,100); // 7 ints with value 100
second.assign (first.begin(),first.end()); // a copy of first
int myints[]={1776,7,4};
first.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';
return 0;
}
输出:
Size of first: 3
Size of second: 7
✥ 复杂度
初始和最终大小呈线性(析构,构造)。
☣ 迭代器的有效性
除了结束迭代器外,与此容器相关的所有迭代器、引用和指针都会失效。
⇄ 数据竞争
访问所有复制的元素。
完成容器修改。
所有元素都被修改。
☂ 异常安全性
基本保证:如果抛出异常,则容器处于有效状态。
如果元素结构的参数不支持allocator_traits::construct,或者[first,last)指定的范围无效,则会导致未定义行为。
🍄 另请参阅
list::list
构建list对象(公众成员函数)
list::operator=
内容赋值(公众成员函数)
list::insert
插入元素(公众成员函数)