21天学通C++--阅读笔记6(模板、标准模板库)
来源:互联网 发布:excel筛选文本数据 编辑:程序博客网 时间:2024/05/17 09:10
模板类
通过将类型作为参数来创建新的实例。
eg.
template<class T>//class表示模板的参数是类型,T表示参数化类型
class ClassA{
void methodA(T t);//定义
};
template<class T>
voidClassA<T>::methodA(T t){};
ClassA<int>intObj;
intObj.methodA(2);
模板类友元
1. 非模板友元类或函数
2.通用模板友元类或函数
3.特定类型模板友元类或函数
eg.
template<class T>
class ClassA{
friend void methodF1(ClassA<int> t);//非模板友元函数
friend void methodF2(ClassA<T> t);//通用模板友元函数
};
//该函数为非模板友元函数
voidmethodF1(ClassA<int> t);
ClassA<int>intClassA;
methodF1(intClassA);
//该函数为通用模板友元函数
template<class T>
voidmethodF2(ClassA<T> t);
ClassA<int>intClassA;
methodF2(intClassA);
模板类静态成员
eg.
template<class T>
class ClassA{
void methodA(T t);
static int GetStaticParam(){return staticParam};
static int staticParam;
};
//通过完整的模板认证完成静态成员变量的初始化
template<class T>
intClassA<T>::staticParam = 0;
注:每一个类型有一个staticParam,例如ClassA<int>类型的所有对象共享一个staticParam,ClassA<double>类型的所有对象共享另一个staticParam。
模板函数
eg.
template<class T>
void methodA(Tt){};
int iData = 0;
methodA(iData);
标准模板库(STL)
基于模板的容器类库,包括链表、列表、队列、堆栈、常用排序查找算法。
vector向量容器:可自增长,主要用于顺序读写
eg.
vector<int>vInt(50);//分配50个元素的内存空间给vector,vInt.size() = 50
vInt.empty();//判断向量是否为空
vInt.erase(vInt.begin()+ 10);//删除第10个元素
vInt.push_back(10);//最末尾增加一个元素
list对元素的频繁插入或删除进行了优化,双向链表
list<int>lInt;
lInt.push_back(10);//最末尾增加一个元素
for(list<int>::const_iteratorit = lInt.begin(); it != lInt.end(); it++){
cout<<*it<<" ";
}
deque继承了vector的顺序读写效率,优化了前端后端操作。主要用于在一端或两端进行插入、删除
stack堆栈,可以在尾端增长和收缩的连续分配区域,后入先出
map映射容器,
class ClassA{
string getName();
}
ClassA obj1;
map<string,ClassA> map_classA;
map_classA[obj1.getName()]= obj1;
ClassAobj2 = map_classA["name"];//检索key="name"的记录
//遍历
for(map<string,ClassA>::const_iterator it = map_classA.begin(); ..; ..){
//first是键key,类型是string,second是值,类型ClassA
cout<<it->first<<":"<<it->second->getName()<<endl;
}
算法类:<algorithm>
函数对象:定义重载运算符()的一个类的实例
template<classT>
class Print{
public: void operator()(const T & t){
cout<<t;
}
}
Print<int>printObj;
printObj(10);//类对象作为函数调用
不变序列算法:不改变序列中的元素,如for_each()、find()、search()、count()
vector<int>vInt(5);
for_each(vInt.begin(),vInt.end(), printObj);//对vInt中的每一个元素调用printObj
改变序列算法:改变序列中的算法,填充或重新安排集合,如fill()
fill(vInt.begin(),vInt.begin() + 2, 1);
fill(vInt.begin()+ 2, vInt.end(), 2);
结果:vInt = 1 1 2 2 2
- 21天学通C++--阅读笔记6(模板、标准模板库)
- c++ 学习笔记--模板与标准模板库(一)
- C++:STL(标准模板库)
- 笔记:标准模板库(STL)
- C++:标准模板库(STL)
- C++:标准模板库vector
- C++:标准模板库map
- C++:标准模板库string
- C++:标准模板库Sort
- C++STL标准模板库
- C++primer 阅读笔记-模板与泛型编程(函数模板)
- C++primer 阅读笔记-模板与泛型编程(类模板)
- C++primer 阅读笔记-模板与泛型编程(模板参数)
- C++primer 阅读笔记-模板与泛型编程(成员模板)
- C++primer阅读笔记-模板与泛型编程(模板实参推断)
- C++primer阅读笔记-模板与泛型编程(重载与模板)
- C++primer阅读笔记-模板与泛型编程(可变参数模板)
- C++primer阅读笔记-模板与泛型编程(模板特例化)
- Android 自定义View (四)
- OJ 38之最大公约数和最小公倍数
- Composer 安装方法
- 断点调试
- Xcode 快捷键大全
- 21天学通C++--阅读笔记6(模板、标准模板库)
- iOS/iPhone学习系列、代码教程----~~~持续更新中~~~
- Java基础视频教程第18天_其他常用对象、IO流一
- MUO
- JSP 入门实例 及tomcat部署
- 微软商业智能(BI)整体方案
- 简历最忌讳的六大错误
- 解决SharePoint 2013 打开Excel时, 无法找到您要的文件。很可能已重命名
- BigTable论文翻译