set内是一颗红黑树,好像我以后也是要学的
注意set是会自动排序的,但是你根本找不到每一个数的排名
因为,set没这个功能,开一个数组记录一下就好了
所以我们现在有这么几个函数
#include<bits/stdc++.h> using namespace std; #define re register int #define ll long long ll n; set<int> a; int b[100000000]; signed main(){ n=5e2; for(re i=0;i<=n;i++)a.insert(i+i);//插入x cout<<"begin(): "<<*a.begin()<<endl;//set内最小的数 cout<<"end(): "<<*a.end()<<endl;//set的大小,size()一样,不过返回的是地址 cout<<"--end(): "<<*--a.end()<<endl;//set内最大的数 cout<<"size(): "<<a.size()<<endl;//set的大小 cout<<"find(2): "<<*a.find(2)<<endl;//查询x,返回地址,但是不能像lower_bound一样做减法,编译不过 cout<<"lower_bound(3): "<<*a.lower_bound(3)<<endl;//set内第一个大于等于x的数的地址 cout<<"upper_bound(4): "<<*a.upper_bound(4)<<endl;//大于x for(re i=0;i<=n;i++)a.erase(i+i);//删除x } begin(): 0 end(): 501 --end(): 1000 size(): 501 find(2): 2 lower_bound(3): 4 upper_bound(4): 6 real 0m0.001s user 0m0.000s sys 0m0.000s
set的用法就这些可以用的上
但是vector内的指针可以进行加减
因为vector内部本身就是一个线性空间,可以的
#include<bits/stdc++.h> using namespace std; #define re register int #define ll long long ll n; vector<int> a; int b[100000000]; signed main(){ n=5e2; for(re i=1;i<=n;i++)a.push_back(i+i);//插入x cout<<"begin(): "<<*a.begin()<<endl;//vector内第一个数的地址 cout<<"--end(): "<<*--a.end()<<endl;//vector内最后一个数的地址 cout<<"size(): "<<a.size()<<endl;//vector的大小 cout<<"front(): "<<a.front()<<endl;//第一个数 cout<<"back(): "<<a.back()<<endl;//最后一个数 } begin(): 2 --end(): 1000 size(): 500 front(): 2 back(): 1000 real 0m0.001s user 0m0.000s sys 0m0.000s
没了