STL基础

目录

一.vector

头文件

创建的几种方式

计算长度   v1.size();

末尾添加新的数值  v1.push_back();

迭代器

二.set

头文件

创建

插入元素 s.insert(data);

查找 s.find(data)

删除  s.erase(data);

三.map(键值对)

头文件

创建

键的排序

四.stack(栈)

 头文件

创建栈

压栈s.push(i);

访问栈顶元素 s.top()

出栈 s.pop();

栈的长度 s.size()

五.queue队列

  头文件

创建队列

入队  s.push(i);

访问队首   s.front()

访问队尾     s.back()

出队   s.pop()

获取长度   s.size()

六.unordered_set和unoredered_map

头文件


一.vector

直接解释可以叫做矢量向量,也可以叫动态数组。

头文件

#include <vector>,  必须有名称空间和头文件

#include <iostream>
#include <vector>

using namespace std;

创建的几种方式

        vector <int> v1;     创建一个动态数组;他是一个空的数组,长度为0;

        vector <int> v2(5);   创建一个动态数组,给它分配了5个空间,初始化为0;

        vector <int> v3(5, 7);   创建一个动态数组,给它分配了5个空间,并且初始化为7.

        一般元素默认值为0.  即 vector <int> v(6);   等价于  vector <int> v(6, 0);

计算长度   v1.size();

变量名.size();   可以计算出长度和大小。

之后会遇到很多这样的形式,一般都是  :  变量名.方式()

eg: v1.resize(length);    重新分配数组大小; length是你想要分配的空间大小

      v1.push_back();  末尾添加新的数据;

末尾添加新的数值  v1.push_back();

只需要在括号中写入想要添加的数组就行,会自动添加到末尾。

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector <int> v1;
    cout << v1.size() << endl;  //这里输出的长度为0
    v1.resize(10);   //给它分配了10个空间
    cout << v1.size() << endl;   //这里输出的长度为10
    //初始化,赋值
    for (int i = 0; i < 10; i++)
        v1[i] = i;
    //进行输出
    for (int i = 0; i < 10; i++)
        cout << v1[i] << "  ";

    vector <int> v2(5);
    v2.push_back(20);  //添加数字20到v2的末尾

    vector <int> v3(5, 7);



    return 0;
}

迭代器

      和遍历很相似就是把在这个容器里的所有元素遍历一遍

        这个方便在于可以不用像for循环中,要知道循环的次数,去设置相应的条件,不用去找边界

#include <iostream>
#include <vector>
using namespace std;
int main()
{

	vector <int> v(10);  //给数组分配10个空间,每个初始化为0

	v.push_back(30);

	//迭代器,进行遍历
	for (auto p = v.begin(); p != v.end(); p++)
		cout << *p << "  ";   //这里p可以看作一个指针

    v.push_back(20);
	for (int i = 0; i < 12; i++)  //使用for循环要改变一个值
	{
		cout << v[i] << "  ";
	}

	system("pause");
	return 0;
}

二.set

set是集合,里面的元素各不相同,就是不能用重复的元素,并且会按从小到大排好序

头文件

#include <set>,  必须有名称空间和头文件

#include <iostream>
#include <set>

using namespace std;

创建

set <int> s;   后面不能带任何参数

插入元素 s.insert(data);

#include <iostream>
#include <set>
using namespace std;
int main()
{
	//集合set ,它里面的元素各不相同,并且输出的时候是排好顺序的(从小到大的顺序)
	set <int> s;

	s.insert(1);
	s.insert(2);
	s.insert(3);

	//迭代器
	for (auto p = s.begin(); p != s.end(); p++)
	{
		cout << *p << "  ";
	}
	cout << endl;


    return 0;
}

查找 s.find(data)

比较的是指针,看是否等于s.end()  找到输出1,没找到输出0;

#include <iostream>
#include <set>
using namespace std;
int main()
{
	//集合set ,它里面的元素各不相同,并且输出的时候是排好顺序的(从小到大的顺序)
	set <int> s;

	s.insert(1);
	s.insert(2);
	s.insert(3);

	cout << (s.find(2) != s.end()) << endl;  //输出的是一个bool值1  只有0或1
	cout << (s.find(4) != s.end()) << endl;  //输出的是一个bool值0  只有0或1

	s.erase(1);
	cout << (s.find(1) != s.end()) << endl;  //输出的是一个bool值  只有0或1
	system("pause");
	return 0;
}

删除  s.erase(data);

erase是橡皮擦的意思,可以理解擦去。

#include <iostream>
#include <set>
using namespace std;
int main()
{
	//集合set ,它里面的元素各不相同,并且输出的时候是排好顺序的(从小到大的顺序)
	set <int> s;

	s.insert(1);
	s.insert(2);
	s.insert(3);

	s.erase(1);
	cout << (s.find(1) != s.end()) << endl;  //输出0,没找到
	system("pause");
	return 0;
}

三.map(键值对)

map是键值对,它会将所有键值对,按照键从小到大排序。

头文件

#include <map>,  必须有名称空间和头文件

#include <iostream>
#include <map>

using namespace std;

创建

map <string, int> m;

在知道他的具体元素时输出,先输出键,后输出值

不知道具体元素可以用迭代器来进行输出(类似结构体指针)

获取长度用  m.size()

#include <iostream>
#include <map>
using namespace std;
int main()
{
	//map键值对,它会自动将所有键值对按从小到大的顺序排好序

	map <string, int> m;
	m["hello"] = 2;
	m["world"] = 3;
    cout << "hello : " << m["hello"] << endl;  //知道具体元素

    //迭代器输出
	for (auto p = m.begin(); p != m.end(); p++)
		cout << p->first << " : " << p->second << endl;


    cout << m.size() << endl;
    return 0;
}

键的排序

键排序是通过Ascii码来进行排序的,从第一个字母开始一次进行比较;与后面的值无关。

四.stack(栈)

数据先进后出,栈只能获取栈顶元素,操作也只能操作栈顶元素,所以不能使用迭代器获取所有元素

 头文件

#include <stack>,  必须有名称空间和头文件

#include <iostream>
#include <stack>

using namespace std;

创建栈

stack <int> s;     stack  <栈的元素类型> 栈的变量名;

压栈s.push(i);

将元素添加到栈中

访问栈顶元素 s.top()

访问最后一个入栈的元素

出栈 s.pop();

出栈都是将栈顶元素移除,栈顶元素改变

栈的长度 s.size()

#include <iostream>
#include <stack>
using namespace std;
int main()
{
	stack <int> s;
	s.push(1);
	s.push(2);
	s.push(3);
    s.pop();

	cout << s.top() << endl;
    cout << "栈的长度 : " << s.size() << endl;

	return 0;
}

五.queue队列

先进先出,后进后出,可以访问队尾和队首

  头文件

#include <queue>,  必须有名称空间和头文件

#include <iostream>
#include <queue>

using namespace std;

创建队列

queue <int> s;     queue  <队列的元素类型> 队列的变量名;

入队  s.push(i);

将元素添加到队列中

访问队首   s.front()

访问队列第一个元素

访问队尾     s.back()

访问队列最后一个元素

出队   s.pop()

将队首的元素移除队列

获取长度   s.size()

#include <iostream>
#include <queue>
using namespace std;
int main()
{
	queue <int> s;
	for (int i = 0; i < 10; i++)
		s.push(i);
	cout << "队首为: " << s.front() << "     队尾为:  " << s.back() << endl;
	s.pop();
	cout << "队首为: " << s.front() << "     队尾为:  " << s.back() << endl;
	cout << s.size() << endl;

	return 0;
}

六.unordered_set和unoredered_map

这两个可以使set和map不用排序,省去排序的时间

头文件

#include <unordered_map> 

#include <unordered_set>

必须有名称空间和头文件

#include <iostream>
#include <unordered_map>
#include <unordered_set>
using namespace std;

 演示代码

#include <iostream>
#include <unordered_map>
#include <unordered_set>
using namespace std;
int main()
{
	unordered_map <string, int> m;
	unordered_set <int> s;

	s.insert(5);
	s.insert(2);
	s.insert(4);

	m["hello"] = 2;
	m["ha"] = 8;
	m["world"] = 5;
	m["he"] = 4;

	for (auto p = s.begin(); p != s.end(); p++)
		cout << *p << endl;

	for (auto p = m.begin(); p != m.end(); p++)
		cout << p->first << " : " << p->second << endl;

	return 0;
}

菜鸟学习,若有错误,希望大佬指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值