stl简单使用及复习

1.栈的简单用法

  • top():

    返回一个栈顶元素的引用,类型为 T&。如果栈为空,返回值未定义。并未删除栈顶的元素;

  • push(a):

    将a压入栈顶

  • pop():

    弹出栈顶元素。即删除栈顶的元素;

  • size():

    返回栈中元素的个数。

2.队列的简单用法 

  1. 头文件#include<queue>
  2. 基本定义方式

     queue<string>a;  定义了一个队列a,

      或者是queue<int>a;

 front()返回 queue 中第一个元素的引用。

back()返回 queue 中最后一个元素的引用。

push(a) queue 的最后面添加一个元素

pop()删除 queue 中的第一个元素。

size()返回 queue 中元素的个数。

empty()如果 queue 中没有元素的话,返回 1,否则返回0

3.容器vector(当成动态数组使用)

  1. 头文件 #include<vector>
  2. Vector<int>a;  定义了一个数组a,数组的长度可以自动改变

Vector<int>a[100];  定义了100个动态数组,相当于100个数组堆放在一起,他们的下标从0开始

a.size()  返回数组元素的长度或者个数,o(1)复杂度

a.empty()  判断数组是否为空,注意注意。。。为空返回1,不为空返回0;

a.begin()   返回第一个元素的值,与a[0]相同

a.end()   越界访问,指向最后一个元素的后面

a.front()  返回第一个元素的值,与a[0]相同

a.back()   返回最后一个元素的值,与a[a.size-1]相同和*--a.end()也相同

因为a的下标是从0开始的,而size是1到n,所以需要减一;

a.push_back(x)   把元素x插入数组的尾部

a.pop_back()    删除vector的最后一个元素

vector的遍历

For(int i=0;i<a.size;i++)

Cout<<a[i]<<endl;

4.map

原理:map就相当于一个映射,假如说,你去超市买菜,售货员在给你打秤时,他需要遍历一下由价格所组成的数组,如果说有一个f(x)的函数,这个函数你输入蔬菜的名称,它就能算出价格数组中的这个蔬菜的位置,那么map就相当于这个f(x)。

补充:散列表

  • 散列技术仅仅是一种查找技术吗?

    应该说,散列既是一种查找技术,也是一种存储技术。

  • 散列是一种完整的存储结构吗?

    散列只是通过记录的关键码定位该记录,没有完整地表达记录之间的逻辑关系,即通过关键码能推出 Key 值,但是通过关键码对应的值(即位置处的值)不能推出关键码,所以散列存储的关键码和值之间并不对称,因此散列主要是面向查找的存储结构。

把map当成一个数组来看,当你向map这个数组中放东西时,相同的东西,都放在同一个位置,就像函数中y=x+1,让x等于一,得到的总是2.

用途:map最大的优势就是查找,因为用它查找时,不用再遍历数组了

mp的一些常用函数:

首先,定义方式:

map<char, int> mymap1;表示放进去的是字符,生成的是一个整数

map<string, int> mymap2;表示放进去的是字符串,生成的是一个整数

map.size();//查询map中有多少对元素,返回的是map中含有多少的函数值(表示的是有多少个不同的函数值)

empty();// 查询map是否为空

map[key]=value//插入操作,也就是对map中的元素赋值,相当于对数组中的元素赋值,不同的地方在于,第一次输入一个x,然后map[x]=vable,第二次再输x时,还是对之前的map[x]继续进行操作。

count<<map[a]<<endl;表示取当x为a时所对应的函数值,用下面的代码来举例就是

     string x="a";
    cout<<mp[x]<<endl; 

输出的结果为a的个数。

遍历操作:

map<string, string>::iterator it;
for (it = mapSet.begin(); it != mapSet.end(); ++it)
{
    cout << "key" << it->first << endl;
    cout << "value" << it->second << endl;
}

没啥好解释的,记住就行。

查找操作:

string x="a"; 
cout<<mp.count(x); 

 判断a是否存在,如果存在,返回1,否则返回0;

例题:输入一个整数n,然后输入n个单词,计算每个单词输出的个数

代码如下:

#include<iostream>
#include<map>
using namespace std;
map<string,int>mp;
int main()
{
	int n;
	cin>>n;
	for(int i=0; i<n; i++)
	{
		string t;
		cin>>t;
		mp[t]++;
	}
	map<string, int>::iterator it;//map的遍历 
	for (it = mp.begin(); it != mp.end(); ++it)
	{
		cout<<it->first<<endl;
		cout<<it->second<<endl;
	}
	return 0;
}

补充说明:map会对map中的元素自动排序,默认升序,如果出现两个相同的(就本题而言,如果有abs a b b abs ,输出的结果为

a
1
abs
2
b
2

也就是说当两个相同的时候,会先输出先出现的那一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值