STL 容器和迭代器连载4_顺序容器的操作1

11 篇文章 0 订阅
/*- ==========================================================
*     文件名  :STL_con_ite_4.cpp
*     开发人员:袁培荣
*     当前版本:1.0.0.2595
*     创建时间:2012-05-23
*     修改时间:2012-05-23
*     功能说明:STL 容器和迭代器连载4_顺序容器的操作1
*     版权说明:版权所有 袁培荣 YuanPeirong 
*     编译环境:Windows 7(x64) SP1 简体中文专业版
*     编译器:  Visual Studio 2010 SP1(中文旗舰版)
                MinGW 20120426 GNU GCC 4.6.2
                Visual C++ 6.0 SP6(中文企业版)
- ==========================================================*/

#include <iostream>
#include <vector>
#include <list>
#include <deque>
#include <string>

using std::cout;
using std::endl;
using std::vector;
using std::list;
using std::deque;
using std::string;

int main(int argc, char* argv[])
{
    //在讲顺序容器的操作前,补充一个知识点:
    //那就是容器的容器的定义:
    vector<vector<int> > con1;
    vector<list<string> > con2;
    list<list<int> > con3;
    list<vector<string> > con4;
    vector<list<deque<int> > > con5;
    //相信你也已经看明白了,无非就是一种嵌套,唯一要注意的是:
    //两个">"符号之间一定要有空格,不然编译器会误认为">>"。
    
    //一般,容器都为自己定义了一些数据类型,如:
    // (在STL vector 介绍连载1-2-3中使用过一些)
    // size_type 无符号的整型,用来存储此容器类型的最大可能容器长度
    // iterator  容器的迭代器类型
    // ……其他不一一介绍
    
    //下面来介绍第一组操作,也是我们前面用过的
    // begin() 返回一个迭代器,指向容器的第一个元素
    // end() 返回一个迭代器,指向容器的最后一个元素的下一位置
    // 以上两个的返回类型是iterator或者const_iterator
    // rbegin() 返回一个逆序迭代器,指向容器的最后一个元素
    // rend() 返回一个逆序迭代器,指向容器的第一个元素的前一个位置
    // 以上两个的返回类型是reverse_iterator或者const_reverse_iterator
    //下面是一个示例:
    vector<int> v1(10,0); //创建一个容器,有10元素,每个都初始化为0
    cout<<"为便于区分每个元素,下面重设每个元素的值"<<endl;
    for(int i=0; i!=10; i++)
    {
        v1[i]=i;
        cout<<"重设v1["<<i<<"]的值为"<<i<<endl;
    }
    //下面就用迭代器来访问
    //先设定四个迭代器来接收上面的四种操作的返回值
    vector<int>::iterator iter1=v1.begin(); //指向v1[0]
    vector<int>::iterator iter2=v1.end();   //指向v1[9]的下一个位置
    vector<int>::reverse_iterator iter3=v1.rbegin(); //指向v1[9]
    vector<int>::reverse_iterator iter4=v1.rend(); //指向v1[0]的前一个位置
    //通过输出来验证
    cout<<"iter1指向元素的值为:"<<*iter1<<endl;
    cout<<"iter2-1指向元素的值为:"<<*(iter2-1)<<endl;
    cout<<"iter3指向元素的值为:"<<*iter3<<endl;
    cout<<"iter4-1指向元素的值为:"<<*(iter4-1)<<endl;
    //这里读者可能用有疑问:iter4指向v1[0]的前一个位置,
    //那么要访问下一个位置,也不是v1[0],应该是加1,而不是减1啊。
    //其实,对于逆序迭代器,加代表前移,减代表后移,刚好和迭代器相反
    
    //为了更进一步说明,我们用迭代器和逆序迭代器来分别输出容器的每一个元素
    cout<<"用迭代器来输出容器的每一个元素"<<endl;
    for(vector<int>::iterator iter=v1.begin();
                              iter!=v1.end(); iter++) //加代表后移
        cout<<*iter<<" ";
    cout<<endl;
    cout<<"用逆序迭代器来输出容器的每一个元素"<<endl;
    for(vector<int>::reverse_iterator riter=v1.rbegin();
                                      riter!=v1.rend(); riter++)//加代表前移
        cout<<*riter<<" ";
    //这里我们明白了,原来逆序迭代器的加法意义和迭代器相反
    //是为了让 ++ 来遍历迭代器和逆序迭代器的方法通用。
    
    return 0;
}


//============================
//运行结果:
//============================
// 为便于区分每个元素,下面重设每个元素的值
// 重设v1[0]的值为0
// 重设v1[1]的值为1
// 重设v1[2]的值为2
// 重设v1[3]的值为3
// 重设v1[4]的值为4
// 重设v1[5]的值为5
// 重设v1[6]的值为6
// 重设v1[7]的值为7
// 重设v1[8]的值为8
// 重设v1[9]的值为9
// iter1指向元素的值为:0
// iter2-1指向元素的值为:9
// iter3指向元素的值为:9
// iter4-1指向元素的值为:0
// 用迭代器来输出容器的每一个元素
// 0 1 2 3 4 5 6 7 8 9 
// 用逆序迭代器来输出容器的每一个元素
// 9 8 7 6 5 4 3 2 1 0
//============================


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值