STL使用方法(C++)

目录

1  前言

2  迭代器

2.1  访问第一个元素

2.2  访问最后一个元素的下一个元素

2.3  遍历方法

2.3.1  while

2.3.2  for(最常用)

2.4  适用性

3  基本数据结构

3.1  vector(动态数组)

3.1.1  insert(插入)

3.1.2  容器嵌套容器

3.1.3  自定义类型

3.1.4  常用函数

3.2  string(字符串)

3.2.1  插入+删除

3.2.2  查找

3.2.3  字符串和数字互化

3.2.4  替换

3.2.5  常用函数

3.3  queue(队列)

3.4  list(链表) 

3.5   priority_queue(优先队列)

3.5.1  常用函数

3.5.2  排序

3.6  stack(栈)

3.7  set(不能有重复元素的集合)multiset(可以有重复元素的集合)

3.7.1  插入+排序

3.7.2  常用函数

3.8  map(键不重复的键值对) multimap(键重复的键值对)

3.8.1   插入+排序

3.8.2  常用函数


1  前言

STL 是“Standard Template Library”的缩写,中文译为“标准模板库”。STL 是 C++ 标准库的一部分,不用单独安装。

C++ 对模板(Template)支持得很好,STL 就是借助模板把常用的数据结构及其算法都实现了一遍,并且做到了数据结构和算法的分离。

STL 从广义上分为: 容器(container) 算法(algorithm) 迭代器(iterator)。

STL提供了六大组件,彼此之间可以组合套用,这六大组件分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器。

容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据,从实现角度来看,STL容器是一种class template。

算法:各种常用的算法,如sort、find、copy、for_each。从实现的角度来看,STL算法是一种function tempalte.

迭代器:扮演了容器与算法之间的胶合剂,共有五种类型,从实现角度来看,迭代器是一种将operator* , operator-> , operator++,operator–等指针相关操作予以重载的class template. 所有STL容器都附带有自己专属的迭代器,只有容器的设计者才知道如何遍历自己的元素。原生指针(native pointer)也是一种迭代器。

仿函数:行为类似函数,可作为算法的某种策略。从实现角度来看,仿函数是一种重载了operator()的class 或者class template

适配器:一种用来修饰容器或者仿函数或迭代器接口的东西。

空间配置器:负责空间的配置与管理。从实现角度看,配置器是一个实现了动态空间配置、空间管理、空间释放的class tempalte.

STL六大组件的交互关系,容器通过空间配置器取得数据存储空间,算法通过迭代器存储容器中的内容,仿函数可以协助算法完成不同的策略的变化,适配器可以修饰仿函数。

2  迭代器

2.1  访问第一个元素

这里以vector为例:

vector::iterator it=v.begin();

2.2  访问最后一个元素的下一个元素

这里以vector为例:

vector::iterator it=v.end();

2.3  遍历方法

2.3.1  while

while(it!=v.end())
{
	cout<<*it<

2.3.2  for(最常用)

for(vector::iterator it=v.begin();it!=v.end();it++)
{
	cout<<*it<

2.4  适用性

2.5  种类

STL使用方法(C++)_第1张图片

 

3  基本数据结构

3.1  vector(动态数组)

3.1.1  insert(插入)

#include 
using namespace std;

int main()
{
	vectorv;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.insert(v.begin(),5,9);//insert(起始地址,插入个数,插入字符) 
	for(vector::iterator it=v.begin();it!=v.end();it++)
	{
		cout<<*it<

3.1.2  容器嵌套容器

#include 
using namespace std;

int main()
{
	vector >v;
	vectorv1;
	vectorv2;
	vectorv3;
	vectorv4;
	v1.push_back(1);
	v2.push_back(2);
	v3.push_back(3);
	v4.push_back(4);
	v.push_back(v1);
	v.push_back(v2);
	v.push_back(v3);
	v.push_back(v4);
	for(vector >::iterator it=v.begin();it!=v.end();it++)
	{
		for(vector::iterator mit=(*it).begin();mit!=(*it).end();mit++)
		{
			cout<<*mit<

3.1.3  自定义类型

类模板:

#include 
using namespace std;

class person
{
public:
	person()
	{
		this->mname=name;
		this->mxuehao=xuehao;
	} 
public:
	string mname,name;
	int mxuehao,xuehao;
};

int main()
{
	person p1;
	cin>>p1.mname>>p1.mxuehao;
	cout<<"xingming:"<

vector自定义: 

#include 
using namespace std;

class person
{
public:
	person(string name,int age)
	{
		this->mname=name;
		this->mage=age;
	}
public:
	string mname;
	int mage;
};

int main()
{
	vectorv;
	person p1("aaa",10);
	person p2("bbb",20);
	person p3("ccc",30);
	v.push_back(p1);
	v.push_back(p2);
	v.push_back(p3);
	
	for(vector::iterator it=v.begin();it!=v.end();it++)
	{
		cout<<"xingming:"<mname<<"nianling:"<mage<

3.1.4  常用函数

3.2  string(字符串)

3.2.1  插入+删除

#include 
using namespace std;

int main()
{
	string s;
	s="abcde";
	s.insert(0,"123");//insert(插入位置,插入字符) 
	cout<

3.2.2  查找

#include 
using namespace std;
//注意两种查找区别 
int main()
{
	//字符串特殊查找 
	string s;
	s="abcdefgbc";
	cout<v;
	v.push_back(123456789);
	if(find(v.begin(),v.end(),123456789)!=v.end())
	{
		cout<<"win";
	}
	return 0;
}

3.2.3  字符串和数字互化

详见例题超级质数:

超级质数(蓝桥杯C/C++算法赛)_菜只因C的博客-CSDN博客_超级质数https://blog.csdn.net/m0_71934846/article/details/128723978?spm=1001.2014.3001.5502

3.2.4  替换

#include 
using namespace std;

int main()
{
	string s;
	s="abcde";
	s.replace(1,3,"xyz");//replace(起始位置,替代长度,替代字符串) 
	cout<

3.2.5  常用函数

STL使用方法(C++)_第2张图片

3.3  queue(队列)

常用函数:

3.4  list(链表) 

常用函数:

3.5   priority_queue(优先队列)

3.5.1  常用函数

3.5.2  排序

注意:

排序的时候,默认是从小到大;从大到小排序要使第三个参数为greater()。
建堆的时候,默认是最大堆;最小堆要使第三个参数为greater()。

优先队列默认大根堆(大到小排序),如果想从小到大排序,那么

,greater >//升序排列(小根堆)

3.6  stack(栈)

常用函数:

3.7  set(不能有重复元素的集合)multiset(可以有重复元素的集合)

3.7.1  插入+排序

注意:

排序的时候,默认是从小到大;从大到小排序要使第三个参数为greater()。
建堆的时候,默认是最大堆;最小堆要使第三个参数为greater()。

set默认从小到大排序,如果想从大到小排序,那么

>//降序排列

#include 
using namespace std;

int main()
{
	sets;//不可重复,小-》大 
	s.insert(1);
	s.insert(1);
	s.insert(3);
	s.insert(2);
	for(set::iterator it=s.begin();it!=s.end();it++)
	{
		cout<<*it< >s1;//不可重复,大-》小 
	s1.insert(1);
	s1.insert(1);
	s1.insert(3);
	s1.insert(2);
	for(set::iterator kit=s1.begin();kit!=s1.end();kit++)
	{
		cout<<*kit<m;//可重复 
	m.insert(1);
	m.insert(1);
	m.insert(3);
	m.insert(2);
	for(multiset::iterator mit=m.begin();mit!=m.end();mit++)
	{
		cout<<*mit<

3.7.2  常用函数

3.8  map(键不重复的键值对) multimap(键重复的键值对)

3.8.1   插入+排序

默认从大到小排序

#include 
using namespace std;

int main()
{
	map >m;//小-》大 
	m.insert(pair(4,10));
	m.insert(pair(2,1));
	m.insert(pair(3,5));
	m.insert(pair(1,9));
	for(map::iterator it=m.begin();it!=m.end();it++)
	{
		cout<first<<' '<second<

3.8.2  常用函数

你可能感兴趣的:(数据结构,算法,蓝桥杯,C/C++,迭代器)