c++ - 这两个 std::vector 的赋值方法有什么区别?

标签 c++ vector assign

有两种方法(据我所知)可以将一个 vector 分配给另一个 vector :

std::vector<std:string> vectorOne, vectorTwo;
// fill vectorOne with strings

// First assign method
vectorTwo = vectorOne;

// Second assign method
vectorTwo.assign( vectorOne.begin(), vectorOne.end() );

当对非常大的 vector 执行时,这些方法真的有区别吗?或者它们在效率和安全性方面是一样的?

最佳答案

它们几乎是等价的。第二个原因是 你可能有需要(隐式)转换的类型:

std::vector<int> vi;
std::vector<double> vd;
//  ...
vd.assign( vi.begin(), vi.end() );

或者容器的类型可能不同:

vd.assign( std::istream_iterator<double>( file ),
           std::istream_iterator<double>() );

如果您知道这两个容器是同一类型,只需 使用赋值。它的优点是只使用一个 对源的引用,并可能允许移动语义 C++11。

关于c++ - 这两个 std::vector 的赋值方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18492750/

相关文章:

c++ - Dir ( python ) 类似于 C++ 中的实用程序

c++ - opencv4+ 中 cvGetWindowHandle() 的替代方案

c++ - DirectX::XMVECTOR 函数 XMVectorSetByIndex() 未设置 float (C++)

C++ vector 迭代器不兼容

variables - Lisp 中的 setq 和 defvar

c++ - 为什么在 C++ 中可以在头文件中定义成员函数而不是自由函数?

c++ - 我怎么知道在单独的类中创建的 QGraphicsItem 是否已经在场景中移动(改变了它的位置)?

vector - 根据键将向量拆分为向量的向量

c++ - 如何复制红黑树,它的分配器应该是什么

具有不同参数的 get 函数的 R 循环