九、类模板和标准模板库STL(Standard Template Library)
2017-02-26 16:03
381 查看
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使用映射查找,速度很快
相关文章推荐
- STL (Standard Template Library)标准模板库 C++
- C++,VC++,MFC,STL(standard template library,标准模板库)
- 标准模板库STL(Standard Template Library )2
- VC++-标准模板库STL(Standard Template Library)
- C++入门-STL (Standard Template Library) 标准模板库
- 什么是STL(Standard Template Library,标准模板库)
- 标准模板库STL(Standard Template Library)
- C++ STL ----- Standard Template Library(模板库)
- STL(Standard Template Library)简介
- STL(Standard Template Library)
- The C++ Standard Library 06 The Standard Template Library 标准模板库
- Generic Programming and the STL(Standard Template Library)
- Standard Template Library (STL)基础
- Introduction to STL, Standard Template Library
- C++ 标准模板库[Standard Template Library]
- An Introduction to the Standard Template Library (STL)
- 算法笔记:C++ STL(Standard Template Library)
- Android NDK 使用C++與 STL(Standard Template Library)
- STL(Standard Template Library)