gpt4 book ai didi

c++ - 自定义迭代器运算符重载

转载 作者:行者123 更新时间:2023-11-30 05:21:34 25 4
gpt4 key购买 nike

我正在尝试实现自定义迭代器的 -> 运算符。但是我不知道如何准确定义它们。

我的 Iterator 类和 MapNode 定义如下:

template <typename Key_T,typename Mapped_T>
class Map<Key_T,Mapped_T>::Iterator
{
MapNode<Key_T,Mapped_T>* curr;
}

template <typename Key_T,typename Mapped_T>
class MapNode
{
Key_T key;
Mapped_T value;
MapNode *up,*down,*prev,*next;
friend class Map<Key_T,Mapped_T>;
};

现在我想重载 operator->,但问题是我不知道如何返回迭代器当前指向的键和值对的指针:

我目前的实现是:

template <typename Key_T,typename Mapped_T>
std::pair<const Key_T, Mapped_T>*
Map<Key_T,Mapped_T>::Iterator::operator->() const
{
const Key_T currKey = (this->curr)->key;
const Mapped_T currVal = (this->curr)->value;

ValueType* vt = new ValueType(std::make_pair(currKey,currVal));

return vt;
}

但我担心这会导致内存泄漏,因为 ValueType 指针内存永远不会被释放。

有人可以指导我如何正确完成这项工作吗?

请帮忙。

[ValueType is defined as std::pair<const Key_T, Mapped_T>]

最佳答案

我首先将 MapNode 中的值存储在 std::pair 中:

template <typename Key_T,typename Mapped_T>
class MapNode
{
std::pair<Key_T, Mapped_T> value;
MapNode *up,*down,*prev,*next;
friend class Map<Key_T,Mapped_T>;
};

然后迭代器可以只返回该对的地址。

template <typename Key_T,typename Mapped_T>
std::pair<const Key_T, Mapped_T> *
Map<Key_T,Mapped_T>::Iterator::operator->() const
{
using ptr = std::pair<const Key_T, Mapped_T> *;
return (ptr)(&(curr->value));
}

转换有点难看,但这就是为什么您将它封装在一段您很少需要查看的代码中。

关于c++ - 自定义迭代器运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40026302/

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