Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试直接跳转到链接列表中的节点 你好,我不知道C++中有没有一个命令可以直接跳到链表中的第五个节点?我知道使用:p->next我可以尝试进入下一个节点,但是如果我想进入第56个节点,有办法吗?比如p->next(56)或者什么?谢谢_C++ - Fatal编程技术网

尝试直接跳转到链接列表中的节点 你好,我不知道C++中有没有一个命令可以直接跳到链表中的第五个节点?我知道使用:p->next我可以尝试进入下一个节点,但是如果我想进入第56个节点,有办法吗?比如p->next(56)或者什么?谢谢

尝试直接跳转到链接列表中的节点 你好,我不知道C++中有没有一个命令可以直接跳到链表中的第五个节点?我知道使用:p->next我可以尝试进入下一个节点,但是如果我想进入第56个节点,有办法吗?比如p->next(56)或者什么?谢谢,c++,C++,如果链表没有内置像p->get(56)这样的命令,那么您必须编写自己的使用for循环的函数。它获取所需元素的列表和编号,然后调用下一个元素的次数。没有这样的“命令”。链表的一个特点是按位置定位特定节点的速度较慢。当然,除非您已经存储了指向该节点的指针 如果这是一个问题,那么链表就不是适合您使用的正确数据结构。C++不提供可在该级别访问的链表类型。它确实有std::list,它提供了封装。您不能直接索引到链接列表中。。。虽然您可以从第一个(或其他已经找到的)元素向前推进56步,但是必须遍历每个节点

如果链表没有内置像p->get(56)这样的命令,那么您必须编写自己的使用for循环的函数。它获取所需元素的列表和编号,然后调用下一个元素的次数。

没有这样的“命令”。链表的一个特点是按位置定位特定节点的速度较慢。当然,除非您已经存储了指向该节点的指针


如果这是一个问题,那么链表就不是适合您使用的正确数据结构。

C++不提供可在该级别访问的链表类型。它确实有std::list,它提供了封装。您不能直接索引到链接列表中。。。虽然您可以从第一个(或其他已经找到的)元素向前推进56步,但是必须遍历每个节点,这是相对低效的。如果您需要更好的性能,您应该重新考虑容器的选择:也许向量或映射更合适。

这就是链表的本质。您必须遍历到第n个元素。

至少如果您有一个类别为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::list l;
// ...
std::list::iterator it=l.begin();
std::advance(it,4);
//现在它指向第五个元素
但正如其他人已经提到的:链表不应该具有随机访问权限。为了获得某个条目,您必须始终通过它。因此,对于大型列表,
std::advance
的性能将非常差