您好我不知道C ++中是否有一个命令可以直接跳转到链表中的第5个节点?我知道:p->接下来我可以尝试去下一个节点但是如果我想去第56个右边的awat有什么方法呢?喜欢p-> next(56)还是什么?谢谢
答案 0 :(得分:3)
如果链表没有像p-> get(56)这样的命令,那么你必须编写自己的使用for循环的函数。它获取你想要的列表和元素的数量,然后接下来调用这个次数。
答案 1 :(得分:2)
没有这样的“命令”。链表的一个特征是按位置定位特定节点的速度较慢。当然,除非您已经存储了指向该节点的指针。
如果这是一个问题,那么链表就不是适合您目的的正确数据结构。
答案 2 :(得分:1)
至少如果您有类别InputIterator的迭代器(std::list
属于此类别),则可以使用std::advance
。例如,如果要让迭代器指向列表开头的第五个元素:
std::list<int> l;
// ...
std::list<int>::iterator it = l.begin();
std::advance(it, 4);
// Now it points to the fifth element
但正如其他人已经提到的那样:链表不应该随机访问。你总是需要通过它来获得一定的条目。因此,std::advance
会对大型列表执行非常。
答案 3 :(得分:0)
C ++不提供您可以在该级别访问的链接列表类型。它确实有std :: list&lt;&gt;,它提供封装。您不能直接索引到链接列表...虽然您可以从第一个(或其他已找到的)元素前进56步,但必须遍历每个节点,这是相对低效的。如果你需要更好的表现,你应该重新考虑你选择的容器:也许一个矢量或地图会更合适。
答案 4 :(得分:0)
这是链接列表的本质。你必须一直遍历到第n个元素。