返回列表索引的更优雅的方法 我在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*/); };

返回列表索引的更优雅的方法 我在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*/); };,c++,nested-class,C++,Nested Class,嵌套类ListNode仅用于实现,因此我不希望CList的用户可以访问ListNode。但由于它是一个列表,用户可以在某个位置插入新节点,因此我添加了成员索引(不应该修改索引!)。但它很愚蠢,我必须手动将它转换到ListNode*。有没有一种优雅的方法可以做到这一点?或者使用嵌套类只是在乞讨中的一个错误。 < P>处理容器中位置的规范C++方法当然是使用迭代器。迭代器可以在内部保存指向ListNode的指针,并使用取消引用操作符*()和操作符->()提供对给定位置元素的访问。两个迭代器可以比较,

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

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


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

我不确定这是否有任何意义。如果我向您提供一个“索引”,它实际上是指向
列表节点的指针,那么我已经可以访问它了。我可以维护指针并根据自己的喜好对其进行修改。将其隐藏在
void*
后面不会改变任何东西。您只需拥有一个
Insert(const T&value)
并自己在内部创建节点即可。然后您可以使用
T Find(const T&value)
。当然,您可以只使用一个
std::list
并完成它。但是用户看不到嵌套的私有类
ListNode
,您不能将其强制转换为
ListNode*
。是的,我已经考虑过迭代器。在这个简单的实现中,它太重了。我得再考虑一下。也许,
iterator
正是我要做的。