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//之前必须是进行排好序的。返回的是第一个重复元素的迭代器

posted on 2022-08-10 17:44  浅唱\,,笑竹神易  阅读(41)  评论(0)    收藏  举报