所以我编写了这个程序并且它可以工作,但我被告知我需要使用迭代器在我编写的函数中移动.我目前正在使用指针,但我认为它们基本上是相同的东西.如果有区别,迭代器是如何使用的?
更新:所以我理解的是,与指针不同,迭代器将移动到列表中的下一个项目,即使该项目不是下一个顺序存储在内存中?它是否正确?但那它怎么知道在哪里移动?我编写了一个添加和删除节点的二叉树.在每个节点中都有指向两个子节点的指针(或者只指向一个子节点),也指向指向父节点的指针.在函数中,我递归调用我正在使用的函数并传递新指针.我有一种感觉,用迭代器替换我所拥有的东西应该很容易,但我仍然不确定.
更新2:我一直在做更多阅读并尝试一些例子,现在我对如何声明迭代器感到困惑.我遇到的所有事情都像我需要为迭代器创建另一个类.但是,当我尝试所有我得到的是编译器错误列表.任何帮助,将不胜感激.谢谢
小智 5
有区别,请考虑:
int arr[] = { 5, 6, 7, 8, 9, 10 };
int * ptr = arr;
printf("%d\n", *ptr++);
printf("%d\n", *ptr++);
Run Code Online (Sandbox Code Playgroud)
您可能会看到并说"为什么使用迭代器,有什么区别?".在这个例子中,我们知道我们可以只指向基地址,并通过递增指针(将指向sizeof(int)字节)逐步执行.使用迭代器似乎很愚蠢,因为它只是包裹着一个指针.
关键是,它只是在这种情况下包裹一个指针.
如果基础数据没有被传染性分配怎么办 - 你不能再只是递增指针了.如果它是一棵树怎么办?如果是链表怎么办?
迭代器概念的要点是,您可以抽象出如何遍历集合的关注,并且只依赖于标准的暴露迭代器方法.对于您的集合的用户,他们无需深入了解您的集合如何存储元素.