STL - 赋值运算符与“赋值”成员函数

STL - assignment operator vs. `assign` member function

提问人:YAKOVM 提问时间:11/2/2013 最后编辑:dypYAKOVM 更新时间:3/12/2018 访问量:2981

问:

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

据我了解,在以下情况下使用它是有用的:assign

  1. 人们想要分配向量的子范围(而不是从开始到结束)。
  2. 赋值是从数组完成的。

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

C++ STL 运算符 赋值

评论

4赞 jrok 11/2/2013
赋值的另一个优点是移动赋值运算符。如果分配一个右值,则该右值将从中移动,而不是从中复制。
1赞 Zach Stark 11/2/2013
一个小缺点是,对于阅读你的代码的人来说,它比一个等号稍微不那么直观,但这是一件小事。assign

答:

18赞 Collin Dauphinee 11/2/2013 #1

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

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

另一个例子是复制两个容器的内容,这些容器装有不同类型的容器,这些容器可以转换为一个或另一个;如果尝试赋值给 ,赋值运算符是不够的。std::vector<Derived*>std::vector<Base*>

评论

1赞 Emil Laine 6/13/2015
你仍然可以做等等,所以是完全多余的。vector = std::vector<int>(set.begin(), set.end())assign
9赞 TemplateRex 7/2/2017
如果您想重用容量而不是分配一个全新的向量,@emlai很有用。assign