c++primer学习笔记(3.4)迭代器iterator

3.4迭代器简介


迭代器是一种检查容器内元素并遍历元素的数据类型。


每种容器都定义了自己的迭代器类型,如:

vector<int>::iteror  iter;   //定义了一个名为iter的变量,他的数据类型是有vector<int>定义//iterator类型。


beginend操作

begin返回的迭代器指向第一个元素

vector<int>::itertor iter=ivec.begin( );    //iter即为ivec的第一个元素ivec[0]

end返回的迭代器指向末端元素的下一个,通常称为“超出末端迭代器”。

//用迭代器将vector<int>中的元素全部置零
   vector<int> vec(10,1);
   for(vector<int>::iterator iter=vec.begin();iter!=vec.end();++iter){
     	*iter=0;
     }


const_iterator类型,只可以读取容器内元素,不可以改变之!

const_iterator类型解引用,只能得到一个指向const对象的引用。

//只有读操作时,使用const_iterator类型
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main(){
     vector<int> vec(10,1);
     for(vector<int>::const_iterator iter=vec.begin();iter!=vec.end();++iter){
        cout<<*iter;
     }     
 return 0;
}


习题3.17

//重做3.13,使用迭代器而不是下标
#include <iostream>
#include <vector>
using namespace std;
int main()
{
  vector<int> ivec;
  int ival;
  cout<<"input numbers(ctrl+z to end):"<<endl;
  while(cin>>ival) 
  ivec.push_back(ival);  
  if(ivec.size()==0){
  	 cout<<"no elements!"<<endl;
  	 return -1;
  }   
   cout<<"sume of each pair of adjacent elements in the vector:"<<endl;
   vector<int>::size_type cnt=0;
   for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();iter=iter+2){
        cout<<*iter+*(iter+1)<<" ";
        cnt++;
         if(cnt%6==0)
         cout<<endl;
 	    }
    if(ivec.size()%2!=0)	    
 	    cout<<"The last element is not been summed"  
 	        <<",the value is "<<*(ivec.end()-1)<<endl;
 	   
   return 0;
}


//重做3.14
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main(){
vector<string> vec;
string val;
while(cin>>val)
vec.push_back(val);
if(vec.empty()){
      cout<<"no data!"<<endl;
  return -1;
}
vector<int>::size_type cnt=0;
for(vector<string>::iterator iter=vec.begin();iter!=vec.end();iter++){
for(vector<string>::size_type index=0;index!=(*iter).size();index++)
            (*iter)[index]=toupper((*iter)[index]);
      cnt++;
      cout<<*iter<<" ";
      if(cnt%8==0)
      cout<<endl;
}
 return 0;
}


习题3.18

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main(){
     vector<int> ivec;
     cout<<"请输去10个数,程序使之变为原来的两倍:"<<endl;
 int val;
 while(cin>>val)
 ivec.push_back(val);
     for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();iter++){
     	*iter=(*iter)*2;
     	cout<<*iter<<" ";
     }
 return 0;
}


习题3.20

以上几个题目使用了vector<int>::iteratorvector<string>::iterator两种迭代器。

为了访问元素类型为intstringvector元素

注意:任何改变vector长度的操作都会使已存在的iter失效!!push_back之后,就不能再信赖指向vector的迭代器的值了!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值