1.如果是pair传递的话,必须说明pair的类型,就相当于是构造函数,需要进行区别,对象
bool cmp(struct pair<double,double> x, pair<double,double> y)//这种类型不会写,可以写auto
{
return x.first<y.first;
}
auto 定义:
auto是一个C/C++语言存储类型,仅在语句块内部使用,初始化可为任何表达式,其特点是当执行流程进入该语句块的时候初始化可为任何表达式。C语言中提供了存储说明符auto、register、extern、static说明的四种存储类别。四种存储类别说明符有两种存储期:自动存储期和静态存储期。其中auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。在函数内部定义的变量成为局部变量。在某些C语言教材中,局部变量称为自动变量,这就与使用可选关键字auto定义局部变量这一作法保持一致。
bool cmp( auto x,auto y)//已经超出语言块的范围了,这样声明式错误的。
2.vector常见定义方法:
(1) vector<int> a(5); //定义了5个整型元素的向量(<>中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的.
(2)vector<int> a(5,1);//定义了5个整型元素的向量,且给出每个元素的初值为1
(3)vector<int> a(b); //用b向量来创建a向量,整体复制性赋值
(4)vector<int> a(b.begin(),b.begin+3); //定义了a值为b中第0个到第2个(共3个)元素
(5)int b[7]={1,2,3,4,5,9,8}; vector<int> a(b,b+7); //从数组中获得初值
vector<vector<bool>> st(rows, vector<bool>(cols, false));
3.queue
fornt(),back();
push(),pop();
4.stack
top();
push();
pop();
5.vector
push_back()//最后边加上一个元素
pop_back()//最后边删除一个元素
vector<vector<int> > p注意定义的时候空格,否则会变成>>
p.size();
p[i].size();
for(itn i=0;i<p.size();i++)
{
for(int j=0;j<p[i].size();j++)
{}
}
6 list;//双向链表
7 deque//双端队列
8 string
string x;
只可以是cin>>x;
不可以使用scanf
不可以cin>>x+1;
重载了运算符+,+=,==;
string s,t;
cin>>s>>t;s=s+t;
char c[10];
只可以使用scanf
可以使用scanf("%s",c+1);
不可以使用scanf
没有重载运算符,但是可以通过strcmp,strcat进行使用
9 set//内部是红黑树(平衡二叉树),可以起到去重的效果,元素从小到大,元素类型是单个类型
成员函数 insert(val)//如果没有的话,插入数值,有的话就不插入O(logn)
erase(val)//如果存在就删除数值,不存在就不管O(logn)
erase(pos)//pos迭代器,直接删除位置。O(1);
find(val);//存在返回迭代器,不存在就返回.end();
count(val)//存在数值val就返回1,否则返回0;
size() clear() swap() empty()
10 multiset和set不同的地方就是,multiset可以存储相同的元素。
因此count 返回的是其中的个数,不一定是0或1;
find(val)如果存在返回的是第一个值为val迭代器,如果不存在返回的是end;
erase(val)删除的是所有的值为val的迭代器。erase(find(val))则会删除第一个为val的迭代器。注意的是find(val)会返回end
11 map映射字典
插入:insert(pair<a,b>)||insert(make_pair(a,b)) , c[i]++//c[i]如果不存在解生成一个单独的空的
删除:erase(pair<a,b>)|erase(make_pair(a,b));
访问下标[]时间的复杂度还是为O(logn)
12 unordered_map unordered_set采用哈希表,时间复杂度降职为O(1),如果哈希冲突,时间复杂度为O(n)
因为 unordered_map unordered_set是属于无需排列,所以不存在lower_bound(val) upper_bound(val)
在algorithm中存在lower_bound(val) 从小到达排列中最小的大于等于val的
upper_bound(val) 从小到大的排列中最小的大于val的
无论数组还是STL均可以使用lower_bound 实际上是一个二分,但是前提,这个数组是按照从小到大排列的
而且返回的是迭代器,如果是STL lower_bound(val) 或upper_bound(val)-begin()//返回的才是下标.
基本所有的数组均会clear(),size(),empty(),swap()时间的复杂度均为O(1)
sort
unique//之前必须是进行排好序的。返回的是第一个重复元素的迭代器
浙公网安备 33010602011771号