矢量擦除方法是否需要类具有=运算符?

问题描述 投票:0回答:2

我正在做一个计算机科学项目,其中我将stl库向量用作向量(Table是我实现的类)。当我尝试在类表中未实现operator =的情况下使用擦除方法时,它会失败。然后我添加了=,现在可以使用了,但是我不确定这是问题所在。是否需要在类中具有operator =才能使用擦除方法?这是一个示例代码:

vector<Table> tables;
Table t("1");
Table t2("2");

tables.push_back(t);
tables.push_back(t2);

tables.erase(tables.begin());//If no operator = is defined this gives problems
c++ c++11 vector stl
2个回答
2
投票

是否需要在类中使用operator =才能使用擦除方法?

是,这是标准要求。

为什么不定义它就运行?

一个类具有默认情况下由编译器生成的隐式赋值运算符,除非在某些情况下(例如,如果它具有不可分配的子对象)。


0
投票

考虑代码中会发生什么。向量中有两个Table,然后擦除第一个。完成后,您将获得一个Table,并且第一个“曾经是”位于存储位置中]

为此,矢量需要将第二个复制/移动到第一个位置。它通过分配来完成。

© www.soinside.com 2019 - 2024. All rights reserved.