返回列表索引的更优雅的方法 我在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
正是我要做的。