使用迭代器的代码看起来非常像带指针的代码.迭代器是一些模糊的类型(std::vector<int>::iterator例如).
我没有得到的是迭代器和指针是如何相互关联的 - 迭代器是指针周围的包装器,带有重载操作以前进到相邻元素,还是其他什么?
所以我编写了这个程序并且它可以工作,但我被告知我需要使用迭代器在我编写的函数中移动.我目前正在使用指针,但我认为它们基本上是相同的东西.如果有区别,迭代器是如何使用的?
更新:所以我理解的是,与指针不同,迭代器将移动到列表中的下一个项目,即使该项目不是下一个顺序存储在内存中?它是否正确?但那它怎么知道在哪里移动?我编写了一个添加和删除节点的二叉树.在每个节点中都有指向两个子节点的指针(或者只指向一个子节点),也指向指向父节点的指针.在函数中,我递归调用我正在使用的函数并传递新指针.我有一种感觉,用迭代器替换我所拥有的东西应该很容易,但我仍然不确定.
更新2:我一直在做更多阅读并尝试一些例子,现在我对如何声明迭代器感到困惑.我遇到的所有事情都像我需要为迭代器创建另一个类.但是,当我尝试所有我得到的是编译器错误列表.任何帮助,将不胜感激.谢谢
我试图从其第一个元素的引用中解析此简单数组。
这是我的代码:
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
vector<int> vec3 { 1,2,3,4,5};
for( vector<int>::iterator ptr = &vec3[0]; ptr != vec3.end(); ++ptr )
{
cout << *ptr << " ";
}
}
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
[Error] conversion from '__gnu_cxx::__alloc_traits<std::allocator<int> >::value_type* {aka int*}' to non-scalar type 'std::vector<int>::iterator {aka __gnu_cxx::__normal_iterator<int*, std::vector<int> >}' requested
Run Code Online (Sandbox Code Playgroud)
有什么问题?
我需要数组中的最小和最大数字,但它告诉我函数的地址将始终为 true 而不是数字。我想不出要改变什么。
#include <iostream>
using namespace std;
int main()
{
double num1[10] {0.61, 1.70, 0.52, 1.34, 0.25, 1.20, 0.46, 1.10, 1.68, 1.37}; //material used in february
double total1 {0};
float average1 {0};
int i;
for (i=0; i<10; i++)
{
total1 = total1 + num1[i];
}
average1 = total1/10.0; //average of material used in feb
double max1(double num1); // maximum of material used in feb
double min1(double num1); // minimum of material used in feb
cout << "Maximum is " …Run Code Online (Sandbox Code Playgroud) 如下面的示例所示,iit对象初始化作为指针返回,任何人都可以解释如何从构造函数返回指针?
int main()
{
std::istream_iterator<int> iit (std::cin);
std::cout << *iit;
return 0;
}
Run Code Online (Sandbox Code Playgroud)