ndk学习之c++语言基础复习----C++容器、类型转换、异常与文件流操作

继续来复习C++,比较枯燥,但是这是扎实掌握NDK开发的必经之路,不容小觑。

容器:

容器,就是用来存放东西的盒子。

常用的数据结构包括:数组array, 链表list, 树tree, 栈stack, 队列queue, 散列表hash table, 集合set、映射表map 等等。容器便是容纳这些数据结构的。这些数据结构分为序列式与关联式两种,容器也分为序列式容器和关联式容器。

STL 标准模板库,核心包括容器、算法、迭代器。


序列式容器/顺序容器:

元素排列次序与元素无关,由元素添加到容器的顺序决定,其相关的容器有以下几种:

容器 说明
vector 支持快速随机访问
list 支持快速插入、删除
deque 双端队列 允许两端都可以进行入队和出队操作的队列
stack 后进先出LIFO(Last In First Out)堆栈
queue 先进先出FIFO(First Input First Output)队列
priority_queue 有优先级管理的queue
  • 向量(vector):连续存储的元素,后进先出。
    下面声明一下:

    另外还有一些重载的形式,如下:

     

    有了容器之后就可以往里面添加、删除数据了,下面来用一下:

    接下来删除一个元素:

    那最终容器里还剩哪个元素呢?下面就可以将元素输出出来,如下:

    另外有个细节想一下,vector是一个模板类,为啥我们可以用下标的形式来访问它里面的元素,很显然是因为该类重写的下标运算符嘛,源码定义如下:

    另外通过下标获取元素还有另外一种方式,如下:

    另外还可以通过函数直接获得队首和队尾的两个元素,如下:

    如果想清空元素可以用:

    还有另外一种清除函数,可以删除某个元素,如下:

    那vector目前的容量是多大呢?也有现成的函数,被清掉之后很明显大小为0嘛,试试看:

    这里可以说明vector容器其内存占用的空间是只增不减的,clear()释放元素之后,去不能减小vector所占的内存空间。那这不会造成内存的浪费么?尤其对于全局的vector变量,然后方法使用到了该全局变量,如下:

    此时全局的容量大小虽说在方法内部被clear()掉了,但大小还是2,那实际如果被调多次那容量不会很可怕,那怎么能达到缩小容量大小的效果呢?这里可以采用swap替换操作,用一个新的临时vector来替换目前的vector,具体做法如下:

    其中还可以简写:

    注意:建立临时vector temp对象,swap调用之后对象vec占用的空间就等于默认构造的对象的大小,temp就具有vec的大小,而temp随即就会被析构,从而其占用的空间也被释放,所以不会有内存泄漏问题。

  • 列表 (list):由节点组成的双向链表,每个结点包含着一个元素。
    其操作跟vector基本类似,略过。
  • 双端队列(deque):连续存储的指向不同元素的指针所组成的数组。
    其操作跟vector基本类似,略过。
  • 队列(queue):先进先出的值的排列。
    比较简单,下面稍过一下:
  • 栈(stack):后进先出的值的排列。
    也直接一笔带过:
  • 优先队列(priority_queue ):元素的次序是由所存储的数据的某个值排列的一种队列。

    也就是说明默认情况下最大的元素在队首,那如果想改变默认的元素排序将最小的放到队首呢,具体就得这么办:

    其中:

    当然这个less和greater都是一个模板结构体 也可以自定义,就类似于Java中的比较器一样,这样less和greater的含义就发生变化了,如下:
    less  让优先队列总是把最大的元素放在队首;
    greater    让优先队列总是把最小的元素放在队首;
    下面用自定义的类型来自定义一下比较器,如下:
    28

关联式容器:

  • 集合(set)
  • 键值对(map)
  • 红黑树

类型转换:

const_cast:

static_cast:

dynamic_cast:

reinterpret_cast:

char*与int转换:

异常:

文件与流操作:

猜你喜欢

转载自www.cnblogs.com/webor2006/p/9781297.html
今日推荐