C++提高篇——STL(上)

C++提高篇——STL(上)

  • 一、什么是STL
  • 二、容器
    • (一)、vector
  • 三、算法
  • 四、迭代器

一、什么是STL

长久以来。软件界一直希望建立一种可冲复利用的东西。C++的面向对象和泛型编程思想,目的就是复用性的提升。大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作,为了建立数据结构和算法的一套标准,诞生了STL。
STL(Standard Template Library,标准模板库)从广义上分为:容器(container)算法(algorithm)迭代器(iterator),容器和算法之间通过迭代器进行无缝连接。STL几乎所有的代码都采用了模板类或者模板函数。
STL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器。
1.容器:各种数据结构,如vector、list、 deque、set、map等,用来存放数据;
2.算法:各种常用的算法,如sort、find, copy、for_each等;
3.迭代器:扮演了容器与算法之间的胶合剂;
4.仿函数:行为类似函故,可作为算法的某种策略;
5.适配器:一种用来修饰容器或者仿函数或迭代器接口的东西;
6.空间配置器:负责空间的配置与管理。

二、容器

STL容器就是将运用最广泛的一些数据结构实现出来
常用的数据结构:数组,链表,树,栈,队列,集合,映射表等这些容器分为序列式容器关联式容器两种:
序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置
关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系

(一)、vector

STL中最常用的容器为Vecter,可以理解为数组,具体举例如下:

void myPrint(int val)
{
	cout << val << endl;
}
void test01() 
{
	//创建vector容器
	vector<int> v;

	//向容器中插入数据
	v.push_back(10);
	v.push_back(20);
	v.push_back(30); 
	v.push_back(40);

	//通过迭代器访问容器中的数据
	vector<int>::iterator Begin = v.begin();  //起始迭代器,指向容器中的第一个元素
	vector<int>::iterator End = v.end(); //指向容器中的最后一个元素的下一个位置

	//第一种遍历方式,如果起始指针不等于最后一个元素下一个位置的指针,则循环
	while (Begin != End)
	{
		cout << *Begin << endl;
		//将指针指向下一个位置
		Begin++;
	}

	//第二种遍历方式,循环开始指向其实指针,如果起始指针不等于结束指针,则向下移动
	for (vector<int>::iterator It = v.begin(); It != v.end(); It++)
	{
		cout << *It << endl;
	}

	//第三种遍历方式 利用STL提供的遍历算法
	for_each (v.begin(), v.end(), myPrint);
}

三、算法

有限的步骤,解决逻辑或数学上的问题,这一门学科我们叫做算法(Algorithms)
算法分为:质变算法非质变算法
质变算法:是指运算过程中会更改区间内的元素的内容。例如拷贝。替换。删除等等
非质变算法:是指运算过程中不会更改区间内的元素内容,例如查找、计数、遍历、寻找极值等等

四、迭代器

提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。每个容器都有自己专属的迭代器。
迭代器使用非常类似于指针,初学阶段我们可以先理解迭代器为指针。
迭代器主要分为如下五种:

输入迭代器:对数据的只读访问,支持只读,支持++、==、!=
输出迭代器:对数据的只写访问,支持只写,支持++
前向迭代器:读写操作,并能向前推进迭代器,支持读写,支持++、== 、! =
双向迭代器:读写操作,并能向前和向后操作,支持读写,支持++、==、!=
随机访问迭代器:读写操作,可以以跳跃的方式访问任意数据。功能最强的迭代器,支持读写,支持++、–、[n]、-n、<、<=、>、>=
目前常用的容器中迭代器种类为双向迭代器,和随机访问迭代器。

你可能感兴趣的:(c++基础,c++,算法,数据结构)