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

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

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

  • 相关阅读:
    loaded some nib but the view outlet was not set
    指标评比
    IOS DEVELOP FOR DUMMIES
    软件测试题二
    javascript select
    DOM节点类型详解
    mysql操作
    UVA 10055
    solutions for 'No Suitable Driver Found For Jdbc'
    解决git中文乱码问题
  • 原文地址:https://www.cnblogs.com/ss815367696/p/2587195.html
Copyright © 2011-2022 走看看