13.泛型编程 STL技术

C++另一种编程思想称为泛型编程 主要利用的技术就是模版 提高复用性

C++提供两种模版机制:函数模版和类模版

template<typename T> 声明一个模版,告诉编译器后面的代码中紧跟着的T是一个通用数据类型不要报错 template声明创建模版 typename表明后面的符号是一种数据类型 可用class代替

void myswap(T &a,T &b) 自动类型推导的情况下 声明了了模版则函数中必须指定T

{

T temp=a;

a=b;

b=temp;

}

使用:

方式一:自动类型推导

myswap(a,b); a,b使用前肯定要定义 编译器就会知道他们的类型 但必须形参推导出同一种数据类型才可用 因为是两个T类型

方式二:显式指定类型

myswap<int>(a,b); 直接告诉它a b是int类型

函数模版 使用自动类型推导 不可以发生隐式类型转换

显式指定类型 可以发生隐式类型转换

同时有函数和模版函数时 可以通过空模板参数列表来强制调用函数模版

myswap<>(a,b);调用模版 myswap(a,b);调用函数

函数模板也可以重载

如果模板有更好的类型匹配 系统会优先调用模版 即使不加空模版参数列表

最好是不要让模版函数和函数同时出现

类型之间的属性操作不一定通用

局限性:如数组之间不能直接用等号赋值

C++为特定类型提供具体化的模板(重载)

学习模版不是为了写而是为了用

类模版语法与函数一样就是把函数名改为类名

类模版没有自动类型推导的使用方式

类模版在参数列表中可以有默认参数

普通类中的成员函数一开始就可以创建,类模版中的成员函数在调用时才创建

STL(标准模板库)

六大组件 容器 算法 迭代器 仿函数 适配器 空间适配器

序列式容器:强调值的排序,每个元素均有固定的位置

关联式容器:二叉树结构,元素间没有严格的顺序关系

质变算法:运算中会更改区间内元素内容 如替换 删除等

非质变算法:不会更改区间内元素内容 只是查找 计数等

迭代器:提供一种方法,使之能够依序寻访某个容器所含的各个元素,每个容器都有自己的专属迭代器

#include<vector>

vector<int> v; 类型 容器名

尾插数据 v.push_back(10);

通过迭代器访问容器中的数据

vector<int>::iterator itBegin=v.begin(); 起始迭代器指向容器中第一个元素

itEnd=v.end(); 结束迭代器 指向容器中最后一个元素的下一个位置

第一种遍历方式:

while(itBegin!=itEnd)

{

cout<<*itBegin<<endl;

itBegin++;

}

第二种遍历方式(常用)

for(vector<int>iterator it=v.begin;it!=v.end();it++)

{

}

第三种

#include<algorithm>

void myprint(int val)

{

cout<<val<<endl;

}

for_each(v.begin(),v.end(),myprint);

容器中可以存放类、指针

容器中嵌套容器 vector<vector<int>> v;

string 就是一个内部封装了char*的类

=assign +=append 查找find rfind 替换replace 对比compare 插入insert 删除erase 截取子本substr

存取 [下表] at(int n)

vector 单端数组 可以动态扩展 空间上不是续接空间,而是整体移到新的大空间

通过区间构造容器 vector<int>v2(v1.begin(),v1.end());

n个elem方式

vector<int>v3(10,100); 10个100加入到容器

empty 判断容器是否为空

capacity 容量

size 元素个数

resize 重新指定容器长度

push_back 尾部插入

pop_back 删除最后一个元素

insert 迭代器指向位置插入元素

erase 删除迭代器指向的元素

clear 删除容器中所有元素

at 返回索引所指的数据

\] 返回索引所指的数据 front 第一个元素数据 back 最后一个元素数据 swap(vec) 互换容器数据 巧用swap收缩内存 vector\(v).swap(v); reserve 容器预留len个元素长度 预留位置不初始化 不可访问 deque 双端数组 可以对头端进行插入删除 其内部有一个中控器维护每段缓冲区 使得起看起来像一片连续的内存空间 sort排序 stack 先进后出 只有一个出口 push pop_back queue 先进先出 只有队头队尾能被外界访问

相关推荐
The Last.H1 小时前
Educational Codeforces Round 185 (Rated for Div. 2)A-C
c语言·c++·算法
2501_941798731 小时前
Python高性能网络爬虫实战:异步IO与多线程结合代码解析
开发语言·python
b***65321 小时前
SpringBoot的@Scheduled和@Schedules有什么区别
java·spring boot·spring
w***4811 小时前
CVE-2024-38819:Spring 框架路径遍历 PoC 漏洞复现
java·后端·spring
亮子AI1 小时前
【Javascript】jsondiffpatch检测到子节点改变了,父节点会标记为改变吗?
开发语言·前端·javascript
caron41 小时前
C++ 推箱子游戏
开发语言·c++·游戏
JienDa1 小时前
JienDa聊PHP:PHP从入门到精通—PHP开发入门:从环境搭建到第一个程序
开发语言·php
架构师沉默1 小时前
为什么工作 10 年都没遇过分布式锁?
java·后端·架构
镜花水月linyi1 小时前
synchronized 锁升级原理:从 JDK 8 实现到 JDK 25 演进
java·后端·java ee