花2分钟时间详细了解C++STL库

前言

自己把学习过程的一些方法和笔记,以及针对出现的各种错误解决方法共享在博客里面,都是从0基础开始的。努力再努力,每天坚持,不断地改进。

一 STL概述

STL——Standard Template Library,中文译为“标准模板库”

二 STL特点:

STL的主要功能就是用于数据处理,是数据结构和算法的分离。这种分离确实使STL变得非常通用,程序员可以在不用思考算法就可以使用数据,在STL中体现了泛型化程序设计

三 关键字auto

auto 关键字是c语言一个弃用的关键字,c++中进行了扩展,可以自动进行类型的推导功能
auto a = 10; //a会自动推导成int
auto b = 3.14; //b推导成double
auto c = 14.2f; //c会推导成float

cout << "类型是:" << typeid(a).name() << endl;
cout << "类型是:" << typeid(b).name() << endl;
cout << "类型是:" << typeid(c).name() << endl;

foreach迭代遍历

void test()
{
	int arr[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
	for (auto e : arr)
	{
		cout << e << " ";
	}
	cout << endl;
}

四 STL标准模板头文件

#include <algorithm> //算法库 sort()
#include <deque> //双端队列
#include <functional> //仿函数
#include <iterator> //迭代器
#include <vector> //动态数组(向量数组)
#include <list> //双向链表
#include <map> //映射
#include <memory> //内存管理
#include <set> //集合
#include <queue>//队列
#include <stack> //栈

五 STL中的组件

1,容器(Container)
是一种数据结构,如list,vector,和deque ,以模板类的方法提供。为了访问容器中的数据,可以使用由容器类输出的迭代器;
2,迭代器(Iterator)
提供了访问容器中对象的方法。例如,可以使用一对迭代器指定容器中的一定范围的对象。迭代器就如同一个指针。迭代器也可以是那些定义了operator*()以及其他类似于指针的操作符地方法的类对象;
3,算法(Algorithm)
是用来操作容器中的数据的模板函数。例如,STL用sort()来对一个数组容器中的数据进行排序,用find()来搜索一个list中的对象,函数本身与他们操作的数据的结构和类型无关,因此他们可以在从简单数组到高度复杂容器的任何数据结构上使用;
4,仿函数 Function object,函数对象(function object)

void fun(){printf("hello");}
void add(int a,int b){return a+b;}
void test()
{
	void(*pFun)();			//定义一个函数指针
	pFun = fun;				//通过函数指针指向这个函数
	pFun();					//通过指针间接调用函数
	int(*pFun2)(int, int) = add;
	cout << pFun2(1, 2) << endl;
	///通过函数模板的形式确定引用的类型
	function<void()> f = fun;
	f();
	function<int(int, int)> f2 = add;
	cout << f2(20, 10) << endl;
}

5,迭代适配器(Adaptor),
6,空间配制器(allocator)也是我们的常用的内存对象
(1)对象的创建与销毁
(2)内存的获取与释放

5.1STL中 的容器

array<T> 是一种大小可变的数组
vector<T>是一种大小可变的向量
list<T> 是一个双向链表容器
queue<T> 是一种队列容器
stack<T> 是一种栈容器
deque<T> 是一种双端队列容器
priority_queue<T> 是一种按值排序的队列容器
set<T> 是一种集合容器
multiset<T> 是一种充许出现重复元素的集合容器
map<key,val> 是一种关联数组容器
multimap<key,val> 是一种充许出现重复key值的关联容器

5.2序列式容器

序列式容器(Sequence containers)
每个元素都有固定位置,array,vector、deque、list;
1,array 数组
(1)c语言数组

int arr[10] = {};
int arr2[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

(2)c++数组

array<int, 10> Arr = { 65, 32, 12, 5, 4, 7, 10, 1, 11, 51 };	

C语言没有边界检查,Arr[15]; c++的array容器提供了越界的检查机制
2,vector: 动态数组,
3,deque: 双端队列 (double-ended queue)的缩写,连续存储的指向不同元素的指针所组成的数组
4,list:双向链表 (double-linkedlist) 由节点组成的双向链表,每个结点包含着一个元素

5.3关联式容器

关联式容器(Associated containers)
元素位置取决于特定的排序准则,和插入顺序无关,
1,set 会自动进行排序, 不会出现重复的元素
2,multiset 多重集合(multiset) 允许存在两个次序相等的元素的集合 ,
3,map 映射(map) 由{键,值}对组成的集合,以某种作用于键对上的谓词排列
4,multimap 多重映射(multimap) 允许键对有相等的次序的映射
底层是由内部由红黑树(RB-tree)实现,可以高效的进行查找

5.4适配器容器

优先队列(priority_queue) 底层实现用的是一个堆
智能指针
auto_ptr 将一个用new开辟内存的指针赋给auto_ptr,会自动回收空间
unique_ptr 拥有独有对象所有权语义的智能指针,一个指针指向一段内存
shared_ptr 拥有共享对象所有权语义的智能指针 。

六 总结

了解了STL是什么,以及它的特性之后,使用STL可以更加方便灵活的处理数据。下期总结STL中容器的使用。
所谓的的错误和bug
编译过程中出错叫:错误,可以直接找错误信息
运行过程中出错叫:异常,可以通过调试找到问题
程序正常运行,结果不对:bug,逻辑错误很难处理

哈哈
哈哈!!

猜你喜欢

转载自blog.csdn.net/qq_45893999/article/details/106580118
今日推荐