zoukankan      html  css  js  c++  java
  • 第三章标准库(迭代器,bitset类型)

    第三章标准库(迭代器,bitset类型)

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

    1、容器的iterator 类型。每种容器类型都定义了自己的迭代器类型,如vector

    Vector<int>::iterator  iter ;这条语句定义了一个名为iter的变量,它的数据类型由vector<int > 定义的iterator 类型。(各容器类都定义了自己的iterator类型,用于访问容器内的元素。)

    2beginend操作

           如果容器中有元素begin 返回迭代器指向第一个元素:

    vector<itn>::iterator  iter = ivec.begin() ;如果容器不为空,iter指向元素为ivec[0]

    end操作返回的迭代器指向vector的末端元素的下一个。常常称为超出末端迭代器,它指向一个不存在的元素。如果vector为空,begin返回的迭代器与end返回的迭代器相同。注意: end操作返回的迭代器不指向vector任何实际元素,它只是一个哨兵的作用,表示我们已处理完了vector中所有元素。

    3、迭代器类型可以用解引用操作符(*)来访问迭代器所指向的元素: *iter 表示iter指向的元素,另外,++iter表示指向下一个元素。(类似C中的指针)

    4、程序实例:

           下标操作:

                  For(vector<int>::size_type  ix = 0; ix != ivec.size(); ++ix)

                                Ivec[ix] = 0 ;

           迭代器:

                  For(vector<int>::iterator  iter = ivec.begin(); iter != ivec.end(); ++iter)

                                *iter = 0;

    上面两个操作都将ivec中的所有元素都赋值为0

    5const_iterator

           当使用const_iterator类型时,我们可以得到一个迭代器,它自身的值可以改变,但不能用来改变其所指向的元素的值。

           如:  vector<int>  nums10);

                    Vector<int>::const_iterator  iter = nums.begin();

                    *iter  = 5   (是错误的,不能改变所指向元素的值)

           然而,当定义 const_vector<int>::iterator  cit = nums.begin();

                               *cit = 1;(正确,可以改变指向元素的值)

                                 ++cit ;    (错误,此时的cit不能自增)

    总结:Vector<int>::const_iterator  不能改写所指向的元素的值

    const_vector<int>::iterator 不能改变自身的值,也就不能指向下一个元素

    6、迭代器的算术操作

           1),iter + n ; iter – n ;  对迭代器对象加上或减去一个整型值,产生一个新的迭代器,其位置在iter所指向元素的前或者后n个元素的位置。注意:加上或者减去的值的类型应该是vectorsize_type 或者difference_type类型

           2),iter1 – iter2    计算两个迭代器对象的距离。Iter1 iter2 必须指向同一个vector中的元素。

    二、标准库bitset类型

    1、定义bitset是,要明确bitset含有多少位: bitset<32> bitvec

    2、构造函数:

           Bitset<n>  b;                    bn位,每位都为0   

           Bitset<n>  b(u);               bunsigned long u的一个副本 

           Bitset<n>  b(s);                bstring对象s中含有的位串的副本   

           Bitset<n>  b(s,pos,n);      bs中从位置pos 开始的n个位的副本

    3、当用unsigned long值作为bitset对象的初始值时,该值将转化为二进制的位模式。

    4、用string对象初始化bitset对象时,string对象直接表示为位模式。从string对象读入位集的顺序是从右向左: string strval(“1100”); bitset<32> bitvec4(strval);

    此时bitvec4 的位模式中第二和第三的位置是1,其余的是0

    注意:string对象的最右边字符(即下标最大的那个字符)用来初始化bits对象的低阶位(下标为0的位)。

    5bitset 对象上的操作(见书本P90)用来测试或者设置bitset对象中的单个或多个二进制位。

    -----------------------------------------------------------------------------------------------------------------------------------------------

    接着昨天第三章的标准库的学习笔记,今天看完了迭代器,bitset类型 ,感觉string,vector,bitset三个标准库都是差不多的,有很多相似的地方,如:都有对对象初始化的构造函数;在对象上的操作。 对比记忆更能加深印象。 下午则看了第四章的数组和指针,数组和指针大部分是与C语言相通相类似的,但是指针部分则发现了一个大不同点:const限定符和指针的连用,笔记我也贴上来吧,如下:

    -------------------------------------------------------------------------------------------------------------------------------------------------

    6、指针和const 限定符

    1)指向const对象的指针: const double *cptr C++强制要偶去指向const对象的指针也必须具有const特性。(const限定了cptr指针所指向的对象类型,并非cptr本身)注意:此时不能使用void*指针保存const对象的地址,必须要用const void* 类型的指针;如果对象不是const 对象,但是仍然不能通过cptr指针来修改其值。但是可以通过直接给该对象赋值或利用其它普通指针来对对象赋值。

    2const 指针:指针本身的值不能修改!

             Int  errNumb;

             Int *const curErr = &errNumb;

    此时的curErr const指针,意味着不能使它再指向其它对象了。此外,const指针也必须在定义时就初始化。

    注意:此时要求curErr 不能改变自身值,但是当它指向的对象不为const时,则可以利用curErr指针来修改对象的值!

    3)指向const对象的const指针:上面两种指针的结合使用!

    如:const double pi = 3.14  const double *const  pi_ptr = &pi ;定义指针的语

    中,第一个const 限制只能指向const对象,且不能改变对象的值;第二个const限制了指针自身不能修改。

             7、指针和typedef

    给出下列语句:     typedef string  *pstring

                                         Const  pstring  cstr ;问cstr的类型是什么?

    声明const  pstring 时,const修饰的是pstring 的类型,这是一个指针。因此,该语句是把cstr 定义为指向string类型对象的const指针,等价于 string *const cstr

    其实,string const s1 const string s2 是等价的,s1s2是同类型的,都是string const

    -------------------------------------------------------------------------------------------------------------------------------------------------

    上面笔记都是最重要的部分,这是一个新知识,但是在有例子和对比学习的方式下,还是比较容易理解的。笔记中的几个注意是很重要的,一些细节的区分点都在这。

  • 相关阅读:
    第一周作业
    模拟赛3 题解
    模拟赛2 题解
    [HNOI2008]GT考试 题解
    NOI Online 提高组 题解
    模拟赛1 题解
    知识点拾遗
    [NOIp2012]疫情控制 题解
    [CEOI2002]Bugs Integrated, Inc. 题解
    [NOIp2017]宝藏 题解
  • 原文地址:https://www.cnblogs.com/ss815367696/p/2587195.html
Copyright © 2011-2022 走看看