struct node{
int a,b;
node(int A=0,int B=0){//构造函数
a=A;
b=B;
}
};
STL库:
//不要越界!
vector<int> a;//定义了长度为0的int类型数组
vector<int> b(10);//定义了长度为10的int类型数组
vector<int> c(20,3);//定义了长度为20的int类型数组,所有位置初始化为3;
//以上所有调用vector的构造函数,都是一维数组
a.push_back(x);//在a的结尾新开一个位置,把x放进去
cout<<a.size();//输出a的数组长度
原理:
一个指针,指向一片区域
vector一般预留两倍的空间,不够用了搬家,在新的位置再开两倍
vector<int>a[10];
a[4][7]:访问了下标为4的vector变量(其实是数组)中下标为7的位置
vector的size函数是unsigned类型的,没负数
所以当计算到-1会转成40多亿
进行max时也不行(max要求两个变量同类型)
补救:转int类型
for(int i=0;i<=int(a.size())-1;i++){
cout<<a[i]<<"\n";
}
maxx=max(b,int(a.size()));
只要有size函数就是unsigned类型的,没负数
(包括但不限于stack,queue,string,pair);
a.clear()//数组长度也清空
不支持clear():stack,queue,ptiority_queue
pair
pair<first类型,second类型>变量名
pair<int,int>a=make_pair(1,2);
map
map数组下标没有限制,可以很大,可以负数
一颗pair类型的红黑树(优化的二叉搜索树)
map<数组下标类型,数组元素类型>数组名
map<string,int>a;
a["abc"]=12;
string s;
a[s]=12;
count()查找相同下标在数组中的个数,0或1
map<int,int>a;
a[7]=1//没有a[7]这个空间,map给我们创建一个
迭代器(iterator):STL版的指针,遍历容器要用它
容器的定义::iterator 变量名;
vertor<int>a;
for(vector<int>::iterator it=a.being();it!=a.end();it++){
cout<<*it<<" ";
}
便利map
map<int,int>a;
for(map<int,int>::it=a) {
cout<<it.first<<" "<<it.second;
}
set
自动去重+排序
set<int> s;
s.insert(x);
s.erase(x);
s.size();
遍历(简写):
for(int x:s){
cout<<x<<" ";
}
迭代器:set<int>::iterator
unordered_map和unordered_set
不进行排序,时间复杂度从log变O(1)
但不稳定
multiset:只排序,不去重
区别
1.count()的数变大
2.删除一个x:
s.erase(s.lower_bound(x));
全删除:
s.erase(x);