我有一个20大小的QVector
填充nullptr
的,我想改变一些nullptr
的对象,当我完成时,我想delete
他们,但不减少矢量的大小。
下面是我尝试的一个例子:
#include <QVector>
#include <QDebug>
int main()
{
//I declare a QVector, sized 20 and filled with nullptr's
QVector<int*> exVector(20, nullptr);
//outs 20
qDebug() << exVector.size();
int* num1 = new int(4);
exVector[2] = num1;
int* numToDel = exVector.takeAt(2);
exVector[2] = nullptr;
delete numToDel;
//outs 19
qDebug() << exVector.size();
}
字符串
如何删除第二个索引处的元素,而不移动向量中的元素并减小其大小?
编辑:这个例子中的问题是@Someprogrammerdude提到的takeAt
函数。
4条答案
按热度按时间4nkexdtk1#
当你想在用一个新值替换一个值后对它进行操作时,
std::exchange()
是要使用的函数:字符串
如果你能够改变
exVector
的类型,你可以让它保存智能指针。然后我们通过分配一个null指针来删除:型
ztigrdn82#
一种方法是使用
std::swap
:字符串
这可以防止您忘记重置
exVector[2]
的问题。whhtz7ly3#
takeAt
函数移除位于索引位置
i
的元素并传回它。[我强调]
因此,
takeAt
函数删除该元素,减小向量的大小。“如果您只想获取特定索引处的元素,请使用普通的
[]
(如exVector[2]
)或使用at
函数(如exVector.at(2)
)。但Botje's
swap
solution可能是最好的。xxb16uws4#
使用
optional
:字符串