九、类模板和标准模板库STL(Standard Template Library)
来源:互联网 发布:淘宝模板怎么用 编辑:程序博客网 时间:2024/05/23 02:03
1. 类模板
// 使用类模板,就可以适用于不同元素类型,避免创建多个类型的类。template <typename T> // 类模板的声明class Array{};// 类模板的使用方法:Array<double> arr(4); // 创建array,初始capacity为4,可以把Array<double>合起来看成一个类名
2. 标准模板库STL
- 一般支持C++的编译器都带了
STL
的支持,里面提供了大量的函数模板(通用算法)和类模板 - STL的头文件一般都是不带
.h
后缀的,eg: #include <vector> // 不是vector.h
- STL 使用命名空间 std, 因此要把此前缀去掉的话,要使用
using namespace std;
3. 标准模板库STL
之vector(一维向量)
- 向量是数组(连续存储)和链表(跳跃存储)的结合体
- vector 设计之初即是为了改善C语言原生数组的种种缺失与不便,而欲提供一种更有效、更安全的数组。
- vector 的使用接口刻意模拟C语言原生数组,较明显的差异在于存储器管理,原生数组必须在宣告数组的时候明确指定数组长度(例如 int a[5]),但是 vector 不需要指定,而是会在运行期依据状况自我调整长度,动态增大容量。
- vector 的使用
#include <vector> std::vector<T> arr // T 是 vector 要存储的对象集合的类型,该 vector 的变量名称是 arr
。
4. 标准模板库STL
之list(单向链表)
list
内部用数据结构的双向连结串列来实现,内部元素内存各处,互相以link
串接起来,每个元素都只知道其前一个元素以及下一个元素的位置。故要遍历整个list,必须从第一个元素开始逐个往下寻访(顺序链式访问,所以只能使用迭代器进行遍历)不支持随机存取(Random Access)。list
的强项是高效的插入以及删除,list
插入或删除时只需要改动元素的link
字段,不需要搬动元素,相对数组、vector
等要高效。list
在经常需要于集合内部任意位置(即除了头尾以外的其他位置) 频繁增删元素的工作上表现优秀。若仅需要于集合尾端增删元素,那应该优先考虑vector
容器,若仅于头尾二端增删元素,那应该优先考虑deque
容器。 -list
的使用:std::list<T> mylist;
list
链表中插入/删除一个节点- 遍历
list
,找到目标位置 - 调用
insert/erase
,插入/删除一个节点// 链表的遍历for (list<int>::iterator iter = lst.begin(); iter != lst.end(); iter++){ int& value = *iter; printf("%d, ", value);}// 删除值为3的节点for (list<int>::iterator iter = lst.begin(); iter != lst.end(); iter++){ int& value = *iter; if (value == 3) { lst.erase(iter); break; }}
- 遍历
5. 标准模板库STL
之string
string
是字符串的基本模板类std::basic_string
使用typedef
定义的模板类实例typedef basic_string< char, char_traits<char>, allocator<char> > string;
string
本质上是以字符作为元素的vector
特化版本;不存在0字符结尾这个概念,能装入’\0’这种数据- 定义字符串变量:
using namespace std; string kk = "hello world!"
- 可以用
c_str()函数来获取
string 内部的字符串指针
6. 标准模板库STL
之map
用于快速查找
- 在map存储中,是按照键值对来存储的 “key-value”
- 无论存储了多少数据,总是可以通过
key
值,直接检索到value
的值 list
使用遍历查找,但需要从头到尾,挨个对比,速度较慢;而map使用映射查找,速度很快
0 0
- 九、类模板和标准模板库STL(Standard Template Library)
- 标准模板库STL(Standard Template Library)
- STL (Standard Template Library)标准模板库 C++
- 什么是STL(Standard Template Library,标准模板库)
- C++,VC++,MFC,STL(standard template library,标准模板库)
- C++入门-STL (Standard Template Library) 标准模板库
- 标准模板库STL(Standard Template Library )2
- 标准模板库(Standard Template Library,STL)学习
- VC++-标准模板库STL(Standard Template Library)
- C++ 标准模板库[Standard Template Library]
- C++ STL ----- Standard Template Library(模板库)
- The C++ Standard Library 06 The Standard Template Library 标准模板库
- C++标准模板库Stand Template Library(STL)简介与STL string类
- 第三章 Standard Template Library,标准模板库(高级版)
- STL(Standard Template Library)
- STL(Standard Template Library)
- Standard Template Library(标准模版库)
- STL(Standard Template Library)总结
- OS X环境下安装MySQL-python
- Android 性能典范:拯救计划
- 一步一步在Windows中使用MyCat负载均衡 上篇
- 每天一题LeetCode[第十四天]
- Android Studio ButterKnife 插件安装使用
- 九、类模板和标准模板库STL(Standard Template Library)
- 基础类(1)
- make 的参数
- Kubernetes 1.2 新功能介绍:Ingress 原理及实例
- 初探hive
- Count the Sheep
- mybatis配置文件
- 配置eclipse maven过程中遇到的问题
- AJAX异步请求