C++标准模板库 – iterator

学习是需要不断的总结,不断更新的。libero也是一样,写这个博客,不仅是为了提高自己,把自己过去的知识总结一下,也是为了方便大家C++初学者,尽可能的用最简单的方式讲解C++。

话说的再多也没用,相信每个学习编程的都一样,编程就是要不断“编写”,不断练习,才能得到提高。如果眼高手低是很难学习的,就像你看这篇文章一样,初看觉得很简单,不值得浪费你上机时间。但是你细想,如果你是第一次接触这个,有多少人,可以看一遍代码能记得住?,就算现在记住了,过了 几天,几个月,甚至几年,你还记得么?

为了提升大家学习的兴趣,libero将采取的教学方式是带着问题进行学习,每一篇文章,都是为了解决一个问题而存在.

问题: 对输入数字求和?

问题分析:以前我们学习c++ 都是先cin 获取用户输入数字,然后 + 运算求和。现在我们学了iterator,换个方式呗。

double data[] {2.5,1.5,8.5,3.2,4.8};
cout<< "The array contains : \n";
for(auto iter = begin(data); iter !=end(data);++iter )
    cout<<*iter<<" ";

auto total  = accumulate(begin(data),end(data),0.0);

cout<<"\n The sum of the array elements is "<<total<<endl;

这是一个求和计算,将你data数组里面的内容进行求和,可能我在这讲解,大家很难明白,但是你运行一遍,自然就懂了。

问题分析:上面的代码虽然能实现求和,但是数字必须保存在data中,这对代码修改和维护是非常不方便的。所以我们对代码改进一下。

cout<<"Enter numeric values separted by space and enter Ctrl +Z to end:"<<endl;
cout<<"\nThe sum  of the values you entered is:"
   <<accumulate(istream_iterator<double>(cin),istream_iterator<double>(),0.0)
  <<endl;

accumulate第二个参数为流结束迭代器,输入的数字通过空格进行隔开,按ctral+z 或者”,“来结束。


对iterator有了初步的认识之后,我们再看看迭代器常用的运算。

1、advance(iter,n)  iter为迭代器,n为整数类型数值,意思是将iter移动n个位置。

问题:int data[] {1,2,4,8,10};  我想直接取出这个数组中的8怎么搞?

问题分析:以前学C++时候我们直接data[3]就行了。但是我们现在是用iterator怎么弄?

int data[] {1,2,4,8,10};
auto iter = begin(data);
advance(iter,3);
cout<< "Fourth element is "<< *iter << endl;

 

2、distance()需要两个迭代器作为参数,返回两个迭代器直接元素个数。

int data[] {1,2,4,8,10};
cout<<"The number of elements in data is: "
   <<distance(begin(data),end(data))
  <<endl;

 

3、next()需要两个参数,参数1 迭代器iter,参数2 整数n,的默认数值是1,通过n可以得到iter正向偏移位置。

int data[] {1,2,4,8,10};
auto iter = begin(data);
auto iterN = next(iter,3);
cout<<"1st elements is: "<<*iter<<" and the 4th is: "<<*iterN<<endl;

 

4、prev(),两个参数,参数1 iter,参数2 整数值n,反向偏移,和next正向偏移比较相似。

int data[] {1,2,4,8,10};
auto iter = end(data);  //指向data末尾,并非10的位置哦!
auto iter1 = prev(iter,3);
auto iter2 = prev(iter); //默认参数为1
cout<<"the 5th is: "<<*iter1<<endl;
cout<<"the 3th is: "<<*iter2<<endl;

今天大家的学习就到这里吧,代码需要多加练习。

 

您可能还喜欢...

想说点什么吗?

您将是第一位评论人!

提醒
avatar