Home C&C++函数库 c++ 语法 程序源码 Linux C库

std::

forward_list::operator=

公众成员函数  <forward_list>
copy (1)
forward_list& operator= (const forward_list& fwdlst);
/pre>
move (2)
forward_list& operator= (forward_list&& fwdlst);
initializer list (3)
forward_list& operator= (initializer_list<value_type> il);

分配内容

将新内容分配给容器,替换其当前内容。

copy assignment (1)将fwdlst中的所有元素复制到容器中(fwdlst保留其内容)。

move assignment (2)将fwdlst 的元素移动到容器中(fwdlst处于未指定但有效的状态)。

initializer list assignment (3) 将il的元素复制到容器中。

容器保留它当前的分配器,除非分配器特征表明fwdlst的分配器应该传递。 这个分配器(通过它的特性)用于在存储需求发生变化时进行分配或释放,以及在需要时构造或销毁元素。

在调用之前保存在容器中的任何元素要么被赋值,要么被销毁。

☲  参数


fwdlst
相同类型的forward_list对象(即具有相同的模板参数,T和Alloc)。
il
一个初始化列表对象。编译器将自动从初始化列表声明符构造此类对象。
这些对象是由初始化列表声明符自动构造的。
成员类型value_type是容器中元素的类型,在 forward_list中定义为其第一个模板形参(T)的别名。

☉  返回值



*this

☣  示例



// assignment operator with forward_list
#include <iostream>
#include <forward_list>

template<class Container>
Container by_two (const Container& x) {
  Container temp(x); for (auto& x:temp) x*=2; return temp;
}

int main ()
{
  std::forward_list<int> first (4);      // 4 ints
  std::forward_list<int> second (3,5);   // 3 ints with value 5

  first = second;                        // copy assignment
  second = by_two(first);                // move assignment

  std::cout << "first: ";
  for (int& x : first) std::cout << ' ' << x;
  std::cout << '\n';

  std::cout << "second: ";
  for (int& x : second) std::cout << ' ' << x;
  std::cout << '\n';

  return 0;
}

在第一个赋值中,第二个是左值:调用复制赋值函数。
在第二个赋值中,by_two(first)返回的值是右值:调用move赋值函数.
输出:
first: 5 5 5
second: 10 10 10

✥ 复杂度



元素的数量是线性的。

☣ 迭代器的有效性



除了结束迭代器外,与此容器相关的所有迭代器、引用和指针都会失效。
在move赋值操作中,指向fwdlst中元素的迭代器、指针和引用也会失效。

⇄ 数据竞争


访问所有复制的元素。
move赋值(2)修改fwdlst。
容器及其所有元素都被修改。

☂ 异常安全性



基本保证:如果抛出异常,则容器处于有效状态。
如果allocator_traits::construct不支持元素构造的适当参数, 或者value_type不是copy assignable(或move assignable for(2)),它将导致未定义的行为。

🍄  另请参阅



forward_list::forward_list 构建forward_list对象(公众成员函数)
forward_list::assign 分配内容(公众成员函数)

联系我们 免责声明 关于CandCplus 网站地图