谁能给我一个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?
答案 0 :(得分:3)
std::vector
是STL的一部分,因此std::vector
的任何描述都可以。底层实现可能略有不同,但所有符合标准的STL版本必须为std::vector
提供相同的接口和相同的保证。我无法在MSDN上快速找到,但这里有两个operator=
的描述:
现在,你问题的第二部分让我困惑。如果没有“将所有内容从A复制到B”,您希望operator=
对矢量做什么?
在您的示例中,您的问题是“如何确保旧的v被清除?”。我可以通过以下两种方式之一来解释这一点:您可能会问“我如何知道此作业v = vector<double>(200,2)
将覆盖v
的内容而不会附加到其中?”。答案是你知道,因为这是operator=
如何适用于STL容器的定义。任何符合标准的实现都保证以这种方式工作。
您可能还会问“当我使用作业v
覆盖它们时,v = vector<double>(200,2)
的内容会发生什么变化?”答案是它们被解除分配,如果它们是对象,它们的析构函数就会被调用。请注意以下重要区别:如果向量包含指向对象的指针,则指针本身将被释放,但不是它们所指向的内容。
如果我没有回答您的问题,请尝试澄清。