C++标准模板类详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++标准模板类详解
⽬录
1标准模板库
2.泛型编程
总结
1 标准模板库
STL提供了表⽰容器、迭代器、函数对象和算法的模板。
容器:类似数组存储若⼲值,切实同质的;
迭代器:遍历容器的对象,类似遍历数组的指针,⼴义指针;
算法:完成特定的任务;
函数对象:类对象或函数指针。
模板类 vector
erase() 删除⽮量中给定区间元素。
接受两个迭代器参数(该参数定义了要删除的区间),迭代器1指向区间起始处,迭代器2指向区间终⽌处的后⼀个位置。
// delete first and second elements
data.erase(data.begin(), data.begin() + 2);
insert() 与erase() 功能相反。
接受三个迭代器参数。
param1 指定新元素插⼊位置,param2 和 param3 定义别插⼊的区间(通常是其他对象)。
// insert [old.begin + 1, old.end) in the front of data
data.insert(data.begin(), old.begin() + 1, old.end());
// 此时,超尾元素显得⼗分⽅便
// 在末尾紧挨着插⼊元素
data.insert(data.end(), old.begin() + 1, old.end());
for_each() 接受三个参数。
param1 和 param2 是定义容器中区间的迭代器,param3 指向函数的指针(函数对象)。
将被指向的函数(param3)⽤于区间 [param1, param2) 的各个元素。
但是被指向的函数 param3 不可以修改区间的值。
// 代替for循环
for(auto iter = data.begin(); iter != data.end(); iter++) {
showData(*iter);
}
// replace for with for_each
// 注意此处的函数showData不能修改data的值。
for_each(data.begin(), data.end(), showData);
sort() 排序函数。
1)接受2个区间的迭代器参数,对元素利⽤<运算符进⾏操作。
2)接受3个参数,前两个指定区间的迭代器,最后⼀个指向要是有的函数指针(对象)。
这⾥的函数类似仿函数特性,但是形式不同于仿函数。
区分全排列(total ordering)和完整弱排序(strict weak ordering)。
// usage 1
sort(data.begin(), data.end());
// usage 2
bool compare(const structData& a, const structData& b) {
if(a.index == b.index) {
return a.data < b.data;
}
return a.index < b.index;
}
// sort with index from little to big, if index is equal, sort with data.
sort(data.begin(), data.end(), compare);
基于范围 for 循环。
不同于 for_each,基于范围的for循环可以修改容器的内容。
2.泛型编程
泛型编程旨在编写独⽴于数据结构的代码(即编写⼀套可以适⽤于所有数据结构的函数代码)。
模板可以按照泛型定义函数或者类。
总结
本篇⽂章就到这⾥了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!。