谁可以给我一个MSDN中vector = vector的链接?

时间:2010-04-15 03:39:23

标签: c++ operators

谁能给我一个MSDN中vector = of vector的链接?

为什么我只能找到operator []?

如果operator =只是默认值,比如复制A到B中的所有内容,以下代码如何工作?

vector<double> v(100,1);
v = vector<double>(200,2);   // if operator= is just a trivail version, how to make sure the old v get cleared? 

1 个答案:

答案 0 :(得分:3)

std::vector是STL的一部分,因此std::vector的任何描述都可以。底层实现可能略有不同,但所有符合标准的STL版本必须为std::vector提供相同的接口和相同的保证。我无法在MSDN上快速找到,但这里有两个operator=的描述:

  1. http://www.cplusplus.com/reference/stl/vector/operator=/
  2. http://www.sgi.com/tech/stl/Vector.html
  3. 现在,你问题的第二部分让我困惑。如果没有“将所有内容从A复制到B”,您希望operator=对矢量做什么?

    在您的示例中,您的问题是“如何确保旧的v被清除?”。我可以通过以下两种方式之一来解释这一点:您可能会问“我如何知道此作业v = vector<double>(200,2)将覆盖v的内容而不会附加到其中?”。答案是你知道,因为这是operator=如何适用于STL容器的定义。任何符合标准的实现都保证以这种方式工作。

    您可能还会问“当我使用作业v覆盖它们时,v = vector<double>(200,2)的内容会发生什么变化?”答案是它们被解除分配,如果它们是对象,它们的析构函数就会被调用。请注意以下重要区别:如果向量包含指向对象的指针,则指针本身将被释放,但不是它们所指向的内容。

    如果我没有回答您的问题,请尝试澄清。