C++ 标准模板类详解

 更新时间:2021年09月14日 11:34:46   作者:菜鸟的人工智能之路  
今天小编就为大家分享一篇关于C++标准模板类的介绍与使用讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

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.泛型编程

泛型编程旨在编写独立于数据结构的代码(即编写一套可以适用于所有数据结构的函数代码)。模板可以按照泛型定义函数或者类。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • C语言结构体定义的方法汇总

    C语言结构体定义的方法汇总

    结构体是一种工具,用这个工具可以定义自己的数据类型。下面通过本文给大家分享了C语言结构体定义的方法汇总,需要的朋友参考下吧
    2017-12-12
  • C++全面精通类与对象

    C++全面精通类与对象

    类和对象是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型;变量就是可以变化的量,存储在内存中—个可以拥有在某个范围内的可变存储区域
    2022-05-05
  • 深入分析C++中deque的使用

    深入分析C++中deque的使用

    本篇文章介绍了,深入分析C++中deque的使用。需要的朋友参考下
    2013-05-05
  • C++类的构造与析构特点及作用详解

    C++类的构造与析构特点及作用详解

    本文章将会可能会涉及到汇编的知识,不过没有关系,我会讲的尽量通俗易懂;另外本篇文章开始前,建议了解下什么是函数重载,这个概念很简单的--有相同的函数名,但参数列表不相同的函数,就是函数重载
    2022-10-10
  • C语言中冒泡排序算法详解

    C语言中冒泡排序算法详解

    大家好,本篇文章主要讲的是C语言中冒泡排序算法详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • 解析C++编程中的bad_cast异常

    解析C++编程中的bad_cast异常

    这篇文章主要介绍了C++编程中的bad_cast异常,bad_cast异常通常出现于表达式中类型转换错误时等一些场景,需要的朋友可以参考下
    2016-01-01
  • C语言中判断两个IPv4地址是否属于同一个子网的代码

    C语言中判断两个IPv4地址是否属于同一个子网的代码

    这篇文章主要介绍了C语言中判断两个IPv4地址是否属于同一个子网的代码,需要的朋友可以参考下
    2017-09-09
  • Matlab绘制雨云图的方法详解

    Matlab绘制雨云图的方法详解

    这篇文章主要介绍了如何利用Matlab实现雨云图的绘制,文中的示例代码讲解详细,对我们学习Matlab有一定的帮助,需要的可以参考一下
    2022-05-05
  • C语言数组详细介绍

    C语言数组详细介绍

    大家好,本篇文章主要讲的是C语言数组详细介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • C++实现WebSocket服务器的案例分享

    C++实现WebSocket服务器的案例分享

    WebSocket是一种在单个TCP连接上进行全双工通信的通信协议,与HTTP协议不同,它允许服务器主动向客户端发送数据,而不需要客户端明确地请求,本文主要给大家介绍了C++实现WebSocket服务器的案例,需要的朋友可以参考下
    2024-05-05

最新评论