如何使用在链接列表中查找
How to use find in linkedlist
这是我使用 STL 库的代码,我尝试在末尾、中间和前面插入一个节点。对于在中间插入,我想在特定节点之后提供插入,而不是将迭代器递增 2,因为如果它是一个长列表,我可能不知道该增加什么,
请帮助为什么查找功能不起作用:
#include <iostream>
#include <list>
#include <string>
using namespace std;
void printlist(list<int> l)
{
list<int>::iterator it = l.begin();
for (it; it != l.end(); ++it)
{
cout << "printlist function call list items: " << *it << endl;
}
}
int main()
{
list<int> l;
l.push_back(1);
l.push_back(2);
l.push_back(3);
list<int>::iterator it = l.begin();
cout << 1 << endl;
printlist(l);
l.push_front(0);
cout << 2 << endl;
printlist(l);
it = l.find(l.begin(), l.end(), 2);
l.insert(it, 25);
cout << 3 << endl;
printlist(l);
return 0;
}
谢谢。。。
std::list<>
没有find()
方法。您可以使用<algorithm>
中声明的标准算法std::find()
:
it = std::find(l.begin(), l.end(), 2);
按@0x499602D2查看答案。
但是为了详细说明@NeilKirk在评论中提出的一个重要观点,您写道:
void printlist(list<int> l)
{
list<int>::iterator it = l.begin();
for (it; it != l.end(); ++it)
{
cout << "printlist function call list items: " << *it << endl;
}
}
请注意,您l
按值传递列表,而不是按引用传递列表。 按值传递类(尚未设计为使用隐式共享)将创建副本。 因此,l
将是传递的参数的副本。 如果您的列表包含一百万个元素,则按值传递它将生成一百万个元素的副本。 您可以通过以下方式解决此问题:
void printlist(list<int> & l) { ... }
或者,如果您不打算进行任何更改,最好通过以下方式宣布:
void printlist(list<int> const & l) { ... }
此外,C++11 有一个基于范围的for
它为你做迭代器开始/结束的事情,以及自动变量类型:
void printlist(list<int> const & l)
{
for (auto i : l)
{
cout << "printlist function call list items: " << i << endl;
}
}
有很多方法可以花哨这种精神。 但更关键的事情不是复制您的数据结构,在不需要的时候按值传递它们!
相关文章:
- 如何在等效列表中查找最小的连接标签
- 在链接列表中查找元素 - C++
- 如何在随机数列表中查找大于或小于的元素
- C++使用旧编译器GCC 4.4.0在结构列表中查找字符串
- 使用特征查找两个列表之间的差异
- 在地图和列表之间查找标准容器
- 在由邻接列表表示的树中查找节点到另一个给定节点之间的路径
- 如何在数组或链接列表中查找特定字符串
- 如何查找结构列表项
- 查找可变参数列表的字符串格式指定符
- 分段错误 - 查找列表的根
- 在GDB中查找列表术语的位置
- 使用 STL 查找列表中成员的最小值<MyStruct>
- 是否有一个标准的算法来查找列表项的并集
- 搜索算法以查找列表中的k个最低值
- 使用 STL 查找列表中的最小值<>
- 查找列表项的组合
- 查找列表中的第一个元素.C++
- 如何在win32项目的OnLbnSelchange()事件中查找列表框上的选定项
- 查找列表中未排序的元素