//万能头文件
#include<bits/stdc++.h>
//命名空间
using namespace std;
char | 1 个字节 | -128 到 127 或者 0 到 255 |
---|---|---|
unsigned char | 1 个字节 | 0 到 255 |
signed char | 1 个字节 | -128 到 127 |
int | 4 个字节 | -2147483648 到 2147483647 |
unsigned int | 4 个字节 | 0 到 4294967295 |
signed int | 4 个字节 | -2147483648 到 2147483647 |
short int | 2 个字节 | -32768 到 32767 |
unsigned short int | 2 个字节 | 0 到 65,535 |
signed short int | 2 个字节 | -32768 到 32767 |
long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
signed long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long int | 8 个字节 | 0 到 18,446,744,073,709,551,615 |
float | 4 个字节 | 精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字) |
double | 8 个字节 | 双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字) |
long double | 16 个字节 | 长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。 |
wchar_t | 2 或 4 个字节 | 1 个宽字符 |
sort(begin, end, cmp):从小到大排序
STL
vector
变长数组
- push_back(item):vector后面添加一个元素item
- pop_back():尾端删除数据
- size():返回vector中所含元素的个数
- clear():一键清空vector中的所有元素
- insert(position, item):根据指定位置在vector中插入元素,v.insert(v.begin()+2,-1)
- erase()
- erase(position):删除指定位置的元素
- erase(positionBegin, positionEnd):删除一个区间的元素
#include<vector>
using namespace std;
vector<类型名> 变量名;
vector<int> name;
vector<double> name;
vector<char> name;
vector<struct node> name;
vector<vector<int> > name;//注意:> >之间要加空格
// vector数组就是一个一维数组,如果定义成vector数组的数组,那就是二维数组。
vector<int> array[SZIE]; //二维变长数组
// 在此,我送你一句话非常受用的话:低维是高维的地址。
//访问
vecntor[i];
//修改
vector[i] = value;
set
set(集合),是一个内部自动有序且不含重复元素的容器
set只能通过迭代器(iterator)访问
原本无序的元素,被插入set集合后,set内部的元素自动递增排序,并且自动去除了重复元素。
注意:除了vector和string之外的STL容器都不支持*(it+i)的访问方式,因此只能按照如下方式枚举:
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> st;
st.insert(5);
st.insert(2);
st.insert(6);
for (set<int>::iterator it = st.begin(); it != st.end(); it++)
{
cout << *it << endl;
}
return 0;
}
- insert(item):插入元素
- find(value):返回的是set中value所对应的迭代器,也就是value的指针(地址)
- erase():删除单个元素、删除一个区间内的所有元素
- erase(it):其中it为所需要删除元素的迭代器。时间复杂度为O(1)。可以结合find()函数来使用
- erase(value):value为所需要删除元素的值
- erase(iteratorBegin , iteratorEnd):删除一个区间内的所有元素
- size():获得set内元素的个数
#include<set>
using namespace std;
set<类型名> 变量名;
set<int> name;
set<double> name;
set<char> name;
set<struct node> name;
set<set<int> > name;//注意:> >之间要加空格
set<类型名> array[SIZE];
string
map
#include<map>
map<string, string> mp;
map<string, int> mp;
mao<int, node>
- find(key):返回键为key的映射的迭代器,用find函数来定位数据出现位置,数据不存在时,返回mp.end()
- erase:
- erase(it):删除迭代器对应的键和值
- erase(key):根据映射的键删除键和值
- erase(first, last):删除左闭右开区间迭代器对应的键和值
- size():返回映射的对数
- clear():返回映射的对数
- insert():插入元素,插入时要构造键值对
- empty():如果map为空,返回true,否则返回false
- begin():返回指向map第一个元素的迭代器(地址)
- end():返回指向map尾部的迭代器(最后一个元素的下一个地址)
- rbegin():返回指向map最后一个元素的迭代器(地址)
- rend():返回指向map第一个元素前面(上一个)的逆向迭代器(地址)
- count():查看元素是否存在,因为map中键是唯一的,所以存在返回1,不存在返回0
- lower_bound():返回一个迭代器,指向键值>= key的第一个元素
- upper_bound():返回一个迭代器,指向键值> key的第一个元素
注意:
查找元素是否存在时,可以使用
①mp.find()
②mp.count()
③mp[key]
但是第三种情况,如果不存在对应的key
时,会自动创建一个键值对(产生一个额外的键值对空间)
所以为了不增加额外的空间负担,最好使用前两种方法
添加元素:
mp["学习"] = "看书";
mp.insert(make_pair("vegetable", "蔬菜"));
mp.insert(pair<string, string>("fruit", "水果"));
访问元素:
//迭代器访问
map<string, string>::iterator it;
for(it=mp.begin(); it!=mp.end(); it++) {
cout << it->first << it->second << endl;
}
//对指定单个元素访问
map<char, int>::iterator it = mp.find('a');
cout << it->first << " " << it->second << endl;
queue
pair
pair只含有两个元素,可以看作是只有两个元素的结构体
#include<utility>
//初始化定义
pair<string, int> p("111", 1); //带初始值
pair<string, int> p; //不带初始值
//赋值
p = {"wang", 18};
p = make_pair("wang", 18);
p = pair<string, int>("wang", 18);
pair<int, int> p[20];
//访问
for(int i=0; i<20; i++) {
cout << p[i].first << " " << p[i].second << endl;
}