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<int>(v).swap(v);

reserve 容器预留len个元素长度 预留位置不初始化 不可访问

deque 双端数组 可以对头端进行插入删除 其内部有一个中控器维护每段缓冲区 使得起看起来像一片连续的内存空间

sort排序

stack 先进后出 只有一个出口 push pop_back

queue 先进先出 只有队头队尾能被外界访问

相关推荐
huangdong_1 小时前
1688商品图片采集技术解析:登录态处理与SKU图自动分类
开发语言
马士兵教育1 小时前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
搬砖魁首1 小时前
基础能力系列 - 多线程2 - 条件变量
c++·rust·条件变量·原子类型·线程同步互斥
chase_my_dream2 小时前
C++ + SLAM 高频面试问题整理
开发语言·c++·面试
snow@li2 小时前
Java:理解 Gradle / 后端项目的管家 / 打包SpringBoot 应用 / 完成编译、下载依赖、运行测试、打包 JAR/WAR / 速查表
java
牛油果子哥q2 小时前
【C++ STL string 】C++ STL string 终极精讲:底层原理、内存机制、全套API、深浅拷贝、易错坑点与工程实战规范
数据库·c++
Cloud_Shy6182 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 30 - 32)
开发语言·人工智能·笔记·python·学习方法
云烟成雨TD2 小时前
Spring AI 1.x 系列【57】动态工具发现:Tool Search Tool
java·人工智能·spring
zfoo-framework2 小时前
[修改代码使用]codex官方app中使用中转(不需要cc-switch) 1.config.toml 2.sk方式登录
java
天佑木枫2 小时前
15天Python入门系列 · 序
开发语言·python