C++——STL标准模板库——初识

一、概念

STL:标准模板库,Standard Template Library的缩写。是c++编程语言中重要部分,提供了一组通用模板,实现常用的数据结构和算法。是泛型编程思想的重要体现,进一步提升了复用性。

STL分为六大组件:容器、算法、迭代器、函数对象、适配器、空间分配器。

二、容器

置物之所也。简单理解,就是我们程序中组织存放数据的盒子。有的盒子拿到后大小就固定了,比如array数组;或者有一种盒子可以自己调整大小,比如vector(大小可变的动态数组);也可能是对数据的顺序有严格要求,或者对数据的存取顺序有严格要求等功能。这些盒子允许你组织存放、操作任何类型的数据,且可以根据具体需求和性能要求选择合适的容器。容器可以分为三种:

(一)、序列容器:

强调值的排序,序列式容器中的每个元素均有固定的位置。 包括:array(数组)、vector(向量)、deque(双端队列)、list(双向列表)、forward_list(单向链表)。

(二)、关联容器:

在关联容器中,按照预定义的顺序插入元素,例如按升序排序。 关联容器有map和set两种容器,底层均以红黑树结构实现,存储的数据有一个键值的映射,通过键值进行自动排序。也有无序版本的unordered_map和unordered_set。

(三)、容器适配器:

容器适配器是序列容器或关联容器的变体,为了简单明确起见,它对容器接口进行限制。 容器适配器不支持迭代器。包含queue(队列:首出尾进)和stack(栈:顶进顶出)。

三、算法(algorithm)

问题之解法也。有限的步骤,解决逻辑或者数学上的问题,这一学科叫做算法(algorithm),使用STL提供的算法需要先#include<algorithm>;算法分为质变算法和非质变算法。

质变算法:是指运算过程中会更改区间内的元素的内容。例如拷贝,替换,删除等等

非质变算法:是指运算过程中不会更改区间内的元素内容,例如查找、计数、遍历、寻找极值等等

特定的算法,只能有特定的容器相互配合使用,实现高效的运算。

四、迭代器(iterator)

迭代器是容器和算法之间的融合剂,)是一种用于遍历容器中元素的对象;所有容器必须通过迭代器进行数据操作,实现删插增改或排序等目的。简单理解,迭代器就是容器中的一个抓手,能够根据要求抓取容器内的数据进行多种操作。每个容器有自己的专属迭代器。

迭代器的使用与指针非常类似,初学者的我们可以先理解为指针。

五、实例

容器使用需要先包含容器头文件,例如要使用vector容器就需要先include<vector>

cpp 复制代码
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>

void myprint(const int& value) {
	cout << value << endl;
}

void test() {
	vector<int> v;
	v.push_back(2);
	v.push_back(5);
	v.push_back(1);
	v.push_back(7);
	v.push_back(4);
	/*方法一初始化两个迭代器*/
	//itbegin指向第一个元素
	vector<int>::iterator itbegin = v.begin();
	//itend指向最后一个元素的后面一个位置
	vector<int>::iterator itend = v.end();
	while (itbegin != itend) {
		cout << *itbegin << endl;
		itbegin++;
	}
	/*方法二*/
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		cout << *it << endl;
	}
	/*方法三用STL提供的遍历算法for_each,需要先包含算法头文件algorithm.
    参数1和参数2指定遍历区间,参数3利用回调函数的指针实现输出*/
	for_each(v.begin(), v.end(), myprint);
}	
int main(int argc, char const *argv[]) {
	test();
	return 0;
}
相关推荐
f狐0狸x1 分钟前
【蓝桥杯每日一题】4.1
c语言·c++·算法·蓝桥杯
ん贤2 分钟前
2023第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(真题&题解)(C++/Java题解)
java·c语言·数据结构·c++·算法·蓝桥杯
满怀10152 分钟前
Python扩展知识详解:lambda函数
开发语言·python
佚名涙1 小时前
go中锁的入门到进阶使用
开发语言·后端·golang
猫猫的小茶馆1 小时前
【PCB工艺】软件是如何控制硬件的发展过程
开发语言·stm32·单片机·嵌入式硬件·mcu·51单片机·pcb工艺
勘察加熊人2 小时前
wpf+c#路径迷宫鼠标绘制
开发语言·c#·wpf
小黄人软件3 小时前
C# ini文件全自动界面配置:打开界面时读ini配置到界面各控件,界面上的控件根据ini文件内容自动生成,点保存时把界面各控件的值写到ini里。
开发语言·c#
二进制人工智能4 小时前
【QT5 网络编程示例】TCP 通信
网络·c++·qt·tcp/ip
Android洋芋5 小时前
C语言深度解析:从零到系统级开发的完整指南
c语言·开发语言·stm32·条件语句·循环语句·结构体与联合体·指针基础
bjxiaxueliang5 小时前
一文详解QT环境搭建:Windows使用CLion配置QT开发环境
开发语言·windows·qt