gpt4 book ai didi

c++ - 返回列表索引的更优雅的方式

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:56:13 27 4
gpt4 key购买 nike

我正在用 C++ 编写一个循环列表。这是我的代码

class CList
{
private:
class ListNode
{
public:
int v;
ListNode *prev;
ListNode *next;
/*constructor*/
};
ListNode *_tail;
public:
typedef const void* const Index;//need a way to represent something like 'index' or 'position'
CList():_tail(0)
{

}
void print()const;
void insert(Index pos, const int &value);
Index find(/*some condition*/);
};

嵌套类ListNode只是用来实现的,所以我不希望CList的用户可以访问ListNode。但由于它是一个列表,用户可以在某个位置插入新节点,所以我添加了成员​​ Index(不应修改 Index!)。但它很愚蠢,我必须手动将其转换为 ListNode*。有没有一种优雅的方法可以做到这一点?或者使用嵌套类只是开始时的错误。

最佳答案

处理容器中位置的规范 C++ 方法当然是使用迭代器。迭代器可以在内部保存指向您的 ListNode 的指针,并使用取消引用 operator*()operator->() 来提供访问到给定位置的元素。两个迭代器可以比较以确定它们是否指向相同的位置(即指向相同的内部 ListNode)。除了 find() 操作之外,insert() 操作还可以提供一个迭代器。 ...当然,erase() 成员可以使用迭代器删除元素。

要完全支持 find(),您还需要某种指示器,例如,指向 null 而不是 ListNode 的单一迭代器,以指示找不到该元素。

关于c++ - 返回列表索引的更优雅的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18425027/

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