分类: C++ - STEMHA's Blog

C++虚函数

虚函数与纯虚函数

定义虚函数的目的:为了允许用基类的指针来调用子类的这个函数。
定义纯虚函数的目的:为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。

C++精度控制

C++的格式控制语法

ostream 类是从ios派生而来的,而ios则是从ios_base派生来的。 ios_base类封装了C++标准中的流输入输出中不依赖于读写的数据的类型的基本信息,如格式化信息、异常状态、事件回调函数等,所以很多的格式控制都需要。

  • C++程序设计时,一般不会直接调用std::ios_base的成员函数,但是会经常用到该类中定义的各种流的数据格式的枚举值常量。如ios_base::hex、ios_base::skipws等等。
  • C++中通过cout来实现格式输出,就类似于C语言中通过printf()来实现格式输出。
  • cout.setf()的作用是通过设置格式标志来控制输出形式

STL 算法整理

标准库中常见的函数与头文件

STL 堆常用操作

基本概念

  • STL中并没有把heap作为一种容器组件,heap的实现亦需要更低一层的容器组件(诸如list,array,vector)作为其底层机制。

  • Heap是一个类属算法,包含在< algorithm >中。

  • STL中关于heap默认调整成的是大顶堆,可以用自定义的compare_fuction函数实现大顶堆或小顶堆。

  • heap的低层机制vector本身就是一个类模板,heap基于vector便实现了对各种数据类型(无论基本数据类型还是用户自定义的数据类型)的堆排(前提是用户自定义的数据类型要提供比较机制compare_fuction函数)。

string常用操作

基本概念

标准库 string 类型:string 类型支持长度可变的字符串,C++ 标准库将负责管理与存储字符相关的内存,以及提供各种有用的操作。
可以使用输入输出流方式直接进行操作,也可以通过文件等手段进行操作。
size_type是一个依赖于实现的整型,是在string中定义的。
string类将string::npos定义为字符串的最大长度,通常为unsigned int的最大值。
另外,使用缩写NBTS(null-terminated string)来表示以空字符结束的字符串。

deque常用操作

概念

Deque(双向队列)

  • 和Queue差不多 ,但是特殊的是Deque可是扩充内存。(实际上连续内存的容器不能随意扩充,所以Deque也不是真正意义上的扩充内存,而是封装了底层的表象。
  • Deque是由一段段构成的,当走到尾端时自动跳到下一段,(支持迭代器++操作)。
  • 每次扩充,就会申请一个段,从而实现了内存连续的假象。

默认的stack 和 queue 都基于 deque 容器实现, priority_queue 则基于 vector 容器实现。
对于给定的适配器,其关联的容器必须满足一定的约束条件。

  • stack 适配器所关联的基础容器可以是任意一种顺序容器类型。因此,stack 栈可以建立在vector、list 或者 deque 容器之上。
  • queue 适配器要求其关联的基础容器必须提供 push_front 运算,因此只能建立在 list 或deque容器上,而不能建立在vector 容器上。
  • priority_queue 适配器要求提供随机访问功能,因此可建立在vector 或 deque 容器上,但不能建立在 list 容器上。

STL排序相关库

sort

函数声明

1
2
3
4
5
template <class RandomAccessIterator>
void sort (RandomAccessIterator first, RandomAccessIterator last);

template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

C++变量初始化

声明只是表明了变量的数据类型和属性,并不分配内存;定义则是需要分配内存的。

C++运算符重载

运算符重载

重载的运算符带有特殊名称的函数

  • 函数名是由关键字 operator 和其后要重载的运算符符号构成的。
  • 与其他函数一样,重载运算符有一个返回类型和一个参数列表

大多数的重载运算符可被定义为普通的非成员函数或者被定义为类成员函数。

list常用操作

基本概念

list

  • 底层数据结构为双向链表,支持快速增删
  • 缺点是无法通过位置来直接访问序列中的元素,也就是说,不能索引元素。为了访问 list 内部的一个元素,必须一个一个地遍历元素,通常从第一个元素或最后一个元素开始遍历。
  • 节点对象维护了两个指针,一个指向前一个节点,另一个指向下一个节点。
  • 第一个元素的前向指针总是为 null,因为它前面没有元素,尾部元素的后向指针也总为 null。
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×