C++提高编程

一、模板

模板就是建立一个通用的模具,大大提高复用性。

c++中另一种编程思想称为泛型,主要利用的技术就是模板。c++提供两种模板机制为函数模板和类模板。

函数模板作用是建立一个通用函数,其函数返回值类型和形参类型可以不具体指定,用一个虚拟的类型来代表。

类模板作用是建立一个通用类,类中的成员、数据类型可以不具体指定,用一个虚拟的类型来代表。

语法:template<typename T>

二、STL初始(standard template libarary,标准模板库)

从广义上分为容器、算法、迭代器。容器和算法之间通过迭代器进行无缝连接。STL几乎所有的代码都采用了模板类或者模板函数。

STL大体分为六大组件:容器、算法、迭代器、仿函数、适配器、空间配置器。

容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据。

算法:各种常用算法,如sort、find、copy、for_each等

迭代器:扮演了容器与算法之间的粘合剂。

仿函数:行为类似函数,可以作为算法的某种策略。

适配器:一种用来修饰容器或者仿函数或者迭代器接口的东西。

空间配置器:负责空间的配置与管理。

三、STL-常用容器

1、string容器

string是c++风格的字符串,而本质是一个类。string类内部封装了很多成员方法。

string构造函数:string();string(const char* s);string(const string& str);string(int n,char c);

string赋值操作:string& operator=();string&  assign();

string拼接操作:string& operator+=();string& append();

string查找和替换:int find(const string& str,int pos=0)const;

string& replace(int pos,int n,const string& str);

string字符串比较 int compare(const string &str)const;

string字符存取:char& operator[](int n);或者char& at(int n);

string插入或删除:string& insert();string& erase();

string子串:string substr();

2、vector容器(与数组类似,也称为单端数组)

与数组不同在于数组是静态空间,而vector可以动态扩展。

动态扩展不是在原有空间扩展,而是开辟更大空间,将原数据赋值过去,并释放原空间。

vector构造函数作用是创造vector容器。vector<T> v;

vector赋值操作:vector& operator-(const vector &vec)    ;assign(beg,end);

对vector容器的容量和大小进行操作:empty();capacity();size();resize();

vector容器的元素插入与删除:puch_back(ele);pop_back();insert();erase();clear();

vector中的数据存取:at(int index);operator[];front();back();

vector互换容器实现两个容器内元素的互换。.swap(vec);

vector预留空间目的是减少vector在动态扩展时的扩展次数。reserve(int len);容器预留len个元素长度,预留位置不初始化,元素不可被访问。

3、deque容器(双端数组,可以对头尾进行插入删除操作)

deque与vector的区别:vector对于头部的插入删除效率低,数据量越大,效率越低;deque相对而言,对头部的插入删除速度比vector快;vector访问元素的速度会比deque快,这和两者内部实现有关。

根据中控器的地址访问元素,类似于数组加链表。

deque赋值操作:deque& operator-(const deque &deq)    ;assign(beg,end);

对deque容器的容量和大小进行操作:empty();size();resize();

deque容器的元素插入与删除:puch_back(ele);puch_front(ele);pop_back();pop_front();insert();erase();clear();

deque中的数据存取:at(int index);operator[];front();back();

deque排序:利用算法对deque容器实现排序。sort(iterator beg,iterator end);

4、stack容器(栈,先进后出)

stack赋值操作:stack& operator-(const stack &stk);

对stack容器的容量和大小进行操作:empty();size();

stack中的数据存取:push();pop();top();

5、queue容器(先进先出的队列)

queue赋值操作:queue& operator-(const queue &que);

对queue容器的容量和大小进行操作:empty();size();

queue中的数据存取:push();pop();front();back();

6、list容器(链表,链式存储)

链表是一种处理存储单元上非连续的储存结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。

反转链表:reverse();排序:sort()

7、set容器/multiset容器

所有元素都会在插入时自动排序。底层结构是用二叉树实现的。set不允许容器中由重复元素,multiset允许。

set容器可以利用仿函数改变排序规则。

8、map/multimap容器

map中所有的元素都是pair对组。pair中第一个元素为key,第二个元素为value。所有元素都会根据元素的键值自动排序。底层结构是二叉树实现的。map不允许容器中由重复的key值元素,multimap则允许。

四、STL-函数对象

 

五、STL-常用算法

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值