【问题标题】:STL - assignment operator vs. `assign` member functionSTL - 赋值运算符与`assign` 成员函数
【发布时间】:2013-11-13 03:55:22
【问题描述】:

vector(以及list和其他容器)有一个成员函数(MF)assign。 我想比较assign MF(范围版本)与赋值运算符。

据我了解,在以下情况下使用 assign 很有用:

  1. 希望分配向量的子范围(不是从头到尾)。
  2. 分配是从一个数组完成的。

在其他情况下,assign MF 没有缺点,可以使用赋值运算符。 我对吗? 使用assignMF还有其他原因吗?

【问题讨论】:

  • 另一个用于赋值的pro是移动赋值运算符。如果您分配一个右值,它将被移动而不是复制。
  • assign 的一个小缺点是,对于阅读您的代码的其他人来说,它比等号稍微不那么直观,但这是一件小事。

标签: c++ stl operators assignment-operator assign


【解决方案1】:

使用assign的主要原因是将数据从一种容器复制到另一种容器。

例如,如果要将std::set<int> 的内容迁移到std::vector<int>,则不能使用赋值运算符,但可以使用vector.assign(set.begin(), set.end())

另一个例子是复制两个容器的内容,这些容器拥有不同的类型,可以转换成一个或另一个;如果您尝试将std::vector<Derived*> 分配给std::vector<Base*>,则分配运算符不足。

【讨论】:

  • 你仍然可以做vector = std::vector<int>(set.begin(), set.end())等,所以assign是完全多余的。
  • @emlai assign 如果您想重用容量而不是分配一个全新的向量,这很有用。
猜你喜欢
  • 2020-07-28
  • 2011-06-05
  • 2011-05-16
  • 2011-12-15
  • 1970-01-01
  • 2013-09-28
  • 2012-10-02
  • 2021-06-28
相关资源
最近更新 更多