标准模板库1(STL)——基本概念

1、广义上分STL分为3类:容器、迭代器、算法。

(1)容器:用于容纳其他类型对象的类对象,STL提供了如向量、列表等诸多不同特性的容器;

(2)迭代器:是智能指针的一种形式,用于指向容器中或者流中的对象,并提供一定的访问方法;

(3)算法:它是STL的核心部分,提供一系列处理元素的特殊方法,如对容器中的元素进行排序、搜索等操作。


2、容器分为三大类容器:顺序容器、关联容器、容器适配器

(1)顺序容器:顺序容器用来表示线性的数据结构,如vector、list等;

(2)关联容器:关联容器用来表示的是非线性数据结构,可以快速定位容器中的元素,如map、muiltest等;

(3)容器适配器:容器适配器可以看做是顺序容器的受限制版本,用于处理特殊的线性数据结构,如stack(先进后出)、队列(先进先出)等。


3、STL中容器的分类

(1)顺序容器:vector、list以及deque;

(2)关联容器:set、multiset、map及multimap;

(3)容器适配器:stack、queue及priority_queue。

各种容器的特点如下:


4、迭代器的分类

迭代器是一种智能指针,STL中提供5种:输入迭代器(input iterator)、输出迭代器(output iterator)、向前迭代器(forward iterator)、双向迭代器(bidirectional iterator)、随机访问迭代器( random-acess iterator)。他们的特点如下:

迭代器种类 特点
输入迭代器 从容器中读取元素,每一步只能沿向前的方向移动一个元素
输出迭代器 用于向容器中写入元素,每一步只能沿向前的方向移动一个元素
向前迭代器 包含输入/输出迭代器的所有功能,既支持读操作,又支持写操作
双向迭代器 包含了向前迭代器的所有功能,还有向后移动的能力,每一步都可以自由选择先前还是向后移动
随机访问迭代器 包含了双向迭代器的所有功能,具有按任意顺序访问任意元素的能力,可以向前或者向后跳过任意多个元素

5、算法的分类

STL中算法分为3类:非修改性算法、修改性算法以及排序、合并和相关操作,各种算法的特点如下:

算法种类 特点
非修改性算法 不改变容器中的内容
修改性算法 通过插入、删除、重排等改变容器中包含的元素
排序、合并和相关操作 改变容器中序列的顺序

6、实例:(1)定义vector容器,并用不同的方式进行访问

/*********************************************
时间:2016年10月12日10:03:27
功能:创建vector容器类,并用多钟方式访问
**********************************************/
#include <iostream>
#include <vector>  //包含vector的头文件
#include <time.h>
using namespace std;

void main()
{
	int ia[] = {1,3,5,7,9,11};
	vector<int> intvec(ia,ia+sizeof(ia)/sizeof(ia[0]));  //创建容器并初始化大小

	cout<<"利用下标运算符遍历容器元素:"<<endl;
	for(int i = 0;i<intvec.size();i++)
	{
		cout<<intvec[i]<<" ";
	}
	cout<<endl;
	cout<<"利用迭代器遍历容器元素:"<<endl;
	vector<int>::iterator it;   //定义迭代器
	for(it = intvec.begin();it != intvec.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
	cout<<"利用迭代器函数随机访问容器元素:"<<endl;
	srand(time(0));
	int pos = rand()%6;
	cout<<"at("<<pos<<")="<<intvec.at(pos)<<endl;   //利用函数访问特定元素
	pos = rand()%6;
	cout<<"*(begin()+"<<pos<<")="<<*(intvec.begin()+pos)<<endl;
}

运行结果如下:



(2)学会使用一些基本的容器操作函数和迭代器操作函数

/****************************************************
时间:2016年10月12日10:48:32
功能:定义vector类的容器,并熟悉一些基本的容器类操作函数
	  定义迭代器,并熟悉一些基本的迭代器操作函数
*****************************************************/
#include <iostream>
#include <vector>
using namespace std;

void display(vector<int> &vec)
{
	vector<int>::iterator it;  //创建迭代器对象
	for(it = vec.begin();it != vec.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
}

void main()
{
	vector<int> vec;  //定义一个空的容器
	for(int i=0;i<3;i++)  //指定要插入的元素个数个值
	{
		int e;
		cin>>e;  //输入要插入的元素
		vec.push_back(e);  //在容器尾插入元素
	}
	display(vec);  //打印插入的元素

	vec.resize(5);  //更改容器大小
	display(vec);   //打印插入的元素
	vec.at(4) = 15;  //在第5个元素的位置插入15
	display(vec);
	vec.pop_back();  //删除最后一个元素
	display(vec);
	vec.erase(vec.begin()+1);  //删除第三个元素
	display(vec);
}
运行结果如下:





发布了56 篇原创文章 · 获赞 50 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/jinpeng_cumt/article/details/52789505