gpt4 book ai didi

c++ - 使用指向 Value 的原始指针从 std::list 中删除?

转载 作者:行者123 更新时间:2023-11-28 00:48:02 24 4
gpt4 key购买 nike

我有一个 std::list<Value>属于管理结构,分发 Value *每当调用工厂方法时的指针。当 Value 时,这些指针被传回管理器。需要销毁。但是,我不确定如何最好地使用这些指针来查找和删除/删除元素。

class ValueManager{
public:

Value * createValue(ValueDef & def) {
m_valueList.push_back( Value( def ) );
return &m_valueList.back();
}

void destroyValue(Value * target) {

// Mystery!
// How does one remove/erase a list element
// with only a pointer to it's value?

}

private:

std::list<Value> m_valueList;

};

两者都是 ::erase::remove似乎不适合这项任务,一个采用迭代器而不是指针,而后者采用整个值,这是无法完成的,因为在这种情况下,Values 之间没有可接受的 == 比较方法| , 只有指针才能可靠地用于找到目标。

我的问题是什么是最有效的实现 destroyValue()可以承担吗?

最佳答案

简单:停止返回原始指针,开始返回迭代器。那么想要销毁一个的用户就传入创建时收到的值,就像现在一样。并且取消引用仍然可以像使用原始指针一样工作。但删除也会起作用,而且效率很高。

关于c++ - 使用指向 Value 的原始指针从 std::list<Value> 中删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15468119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com