没有合适的资源?快使用搜索试试~ 我知道了~
首页C++ STL入门到精通:通用容器与函数模板实践
C++ STL入门到精通:通用容器与函数模板实践
需积分: 0 0 下载量 76 浏览量
更新于2024-06-16
收藏 2.57MB DOC 举报
本资源是一份针对C++ STL(Standard Template Library,标准模板库)的学习资料汇总,适合想要从零基础学习C++并且深入理解STL特性的开发者。C++ STL是C++语言中一个强大的工具集,它提供了一系列预先设计的容器和算法,用于处理各种数据结构和操作。 主要内容分为两部分: 项目十五:C++核心编程 - 万能择优器 第1节项目需求涉及创建一个通用容器,可以存储不同类型的数据,如整数、字符、浮点数和自定义的结构体和类。例如,通过`std::vector`容器实现存储整数和`demo`类对象,并能够根据比较规则找到其中的最大值或最小值。这里展示了如何使用`push_back`方法向容器中添加元素,以及通过`value()`函数访问`demo`类对象的值。 C++函数模板的应用 第2节深入讲解了C++函数模板的概念,这是一种模板编程的核心概念。函数模板允许开发者编写一次函数,但可以在编译时根据不同类型参数实例化多次。在本项目需求中,目标是实现一个通用的`intMax`函数模板,它可以接受`char`、`int`和`double`类型的参数,返回两个数的最大值。这是泛型编程的体现,通过模板使得代码更具灵活性和复用性。 学习这个资源,你可以掌握C++ STL的基本用法,包括容器的使用、模板的原理与实践,以及如何利用模板编写高效的通用代码。这对于提高编程效率和代码质量具有重要意义。通过实际项目的演练,可以巩固理论知识,并逐步提升在C++编程中的实践能力。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/88880742/bg10.jpg)
QQ 交流群:875300321
QQ 交流群:
89794384011
11a2222222
2894544897
9438401111
8979438408
9794384028
97943840
875300321
8979438401111
a2222222289
45448979438
40111189794
38408979438
40289794384
0
.LFE1024:
.size _Z3MaxIfET_S0_S0_, .-_Z3MaxIfET_S0_S0_
.text
.type _Z41__static_initialization_and_destruction_0ii, @function
_Z41__static_initialization_and_destruction_0ii:
.LFB1025:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
movl %edi, -4(%rbp)
movl %esi, -8(%rbp)
cmpl $1, -4(%rbp)
jne .L16
cmpl $65535, -8(%rbp)
jne .L16
movl $_ZStL8__ioinit, %edi
call _ZNSt8ios_base4InitC1Ev
movl $__dso_handle, %edx
movl $_ZStL8__ioinit, %esi
movl $_ZNSt8ios_base4InitD1Ev, %edi
call __cxa_atexit
.L16:
nop
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE1025:
.size
_Z41__static_initialization_and_destruction_0ii, .-_Z41__static_initialization_and
_destruction_0ii
.type _GLOBAL__sub_I_main, @function
_GLOBAL__sub_I_main:
.LFB1026:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $65535, %esi
movl $1, %edi
call _Z41__static_initialization_and_destruction_0ii
![](https://csdnimg.cn/release/download_crawler_static/88880742/bg11.jpg)
QQ 交流群:875300321
QQ 交流群:
89794384011
11a2222222
2894544897
9438401111
8979438408
9794384028
97943840
875300321
8979438401111
a2222222289
45448979438
40111189794
38408979438
40289794384
0
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE1026:
.size _GLOBAL__sub_I_main, .-_GLOBAL__sub_I_main
.section .init_array,"aw"
.align 8
.quad _GLOBAL__sub_I_main
.section .rodata
.align 4
.LC0:
.long 1073741824
.align 4
.LC1:
.long 1077936128
.hidden __dso_handle
.ident "GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.5) 5.4.0 20160609"
.section .note.GNU-stack,"",@progbits
结论:
1. 编译器并不是把函数模板处理成能够处理任意类型的函数
2. 编译器从函数模板通过具体类型产生不同的函数
![](https://csdnimg.cn/release/download_crawler_static/88880742/bg12.jpg)
QQ 交流群:875300321
QQ 交流群:
89794384011
11a2222222
2894544897
9438401111
8979438408
9794384028
97943840
875300321
8979438401111
a2222222289
45448979438
40111189794
38408979438
40289794384
0
2. 类模板的使用
1.为什么需要类模板
类模板与函数模板的定义和使用类似,有时,有两个或多个类,其功能是相同的,仅仅是
数据类型不同,我们可以通过如下面语句声明了一个类模板:
// demo 15-7.c
template <typename T>
class A
{
public:
A(T t)
{
this->t = t;
}
T &getT()
{
return t;
}
public:
T t;
};
➢ 类模板用于实现类所需数据的类型参数化
➢ 类模板在表示支持多种数据结构显得特别重要,这些数据结构的表示和算法不受所
包含的元素类型的影响
2.类模板定义
类模板由模板说明和类说明构成
模板说明同函数模板,如下:
template <类型形式参数表>
类声明
例如:
template <typename Type>
class ClassName
{
//ClassName 的成员函数
private :
Type DataMember;
}
![](https://csdnimg.cn/release/download_crawler_static/88880742/bg13.jpg)
QQ 交流群:875300321
QQ 交流群:
89794384011
11a2222222
2894544897
9438401111
8979438408
9794384028
97943840
875300321
8979438401111
a2222222289
45448979438
40111189794
38408979438
40289794384
0
3.单个类模板的使用
// demo 15-8.c
#include <iostream>
using namespace std;
template <typename T>
class A
{
public:
//函数的参数列表使用虚拟类型
A(T t=0)
{
this->t = t;
}
//成员函数返回值使用虚拟类型
T &getT()
{
return t;
}
private:
//成员变量使用虚拟类型
T t;
};
void printA(A<int> &a){
cout<<a.getT()<<endl;
}
int main(void){
//1.模板类定义类对象,必须显示指定类型
//2.模板种如果使用了构造函数,则遵守以前的类的构造函数的调用规则
A<int> a(666);
cout<<a.getT()<<endl;
//模板类做为函数参数
printA(a);
system("pause");
return 0;
}
![](https://csdnimg.cn/release/download_crawler_static/88880742/bg14.jpg)
QQ 交流群:875300321
QQ 交流群:
89794384011
11a2222222
2894544897
9438401111
8979438408
9794384028
97943840
875300321
8979438401111
a2222222289
45448979438
40111189794
38408979438
40289794384
0
4.继承中类模板的使用
// demo 15-9.c
#include <iostream>
using namespace std;
//继承中父子类和模板类的结合情况
//1.父类一般类,子类是模板类, 和普通继承的玩法类似
//2.子类是一般类,父类是模板类,继承时必须在子类里实例化父类的类型参数
//3.父类和子类都时模板类时,子类的虚拟的类型可以传递到父类中
/*class B
{
public:
B(int b)
{
this->b = b;
}
private:
int b;
};
*/
template <typename T>
class A
{
public:
//函数的参数列表使用虚拟类型
A(T t)
{
this->t = t;
}
//成员函数返回值使用虚拟类型
T &getT()
{
return t;
}
private:
//成员变量使用虚拟类型
T t;
};
template <typename Tb>
class B: public A<int>
{
剩余117页未读,继续阅读
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
*向日葵
- 粉丝: 130
- 资源: 1
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- 京瓷TASKalfa系列维修手册:安全与操作指南
- 小波变换在视频压缩中的应用
- Microsoft OfficeXP详解:WordXP、ExcelXP和PowerPointXP
- 雀巢在线媒介投放策划:门户网站与广告效果分析
- 用友NC-V56供应链功能升级详解(84页)
- 计算机病毒与防御策略探索
- 企业网NAT技术实践:2022年部署互联网出口策略
- 软件测试面试必备:概念、原则与常见问题解析
- 2022年Windows IIS服务器内外网配置详解与Serv-U FTP服务器安装
- 中国联通:企业级ICT转型与创新实践
- C#图形图像编程深入解析:GDI+与多媒体应用
- Xilinx AXI Interconnect v2.1用户指南
- DIY编程电缆全攻略:接口类型与自制指南
- 电脑维护与硬盘数据恢复指南
- 计算机网络技术专业剖析:人才培养与改革
- 量化多因子指数增强策略:微观视角的实证分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)