vector
#include<stdio.h> #include<iostream> #include<string.h> #include<queue> #include<stack> #include<list> #include<stdlib.h> #include<algorithm> #include<vector> #include<map> #include<set> using namespace std; int cmp(const int a,const int b) { return a>b; } int main() { vector<int>q ,q1; int n; scanf("%d",&n); for(int i=0;i<n;i++){ int t;scanf("%d",&t); q.push_back(t); // push_back; q1.insert(q1.begin()+i,t); // 插入位置 和数组一样 从 0 开始 。 } for(int i=0;i<n;i++) printf("%d ",q1[i]); puts(""); for(int i=0;i<n;i++) printf("%d ",q[i]); printf(" "); for(vector<int> ::iterator it=q.begin();it!=q.end();it++) printf("%d ",*it); //迭代器的使用 puts(""); reverse(q.begin(),q.end()); //反向输出 for(vector<int> :: iterator it=q.begin();it!=q.end();it++){ printf("%d ",*it); } puts(""); sort(q.begin(),q.begin()+n,cmp);//sort对容器的使用 比较函数 for(int i=0;i<n;i++) printf("%d ",q[i]); puts(""); q.erase(q.begin()+2);// 删除第三个元素 时间复杂度 O(n); printf("%d ",q.size()); q.erase(q.begin(),q.begin()+2); for(vector<int> :: iterator it=q.begin();it!=q.end();it++) printf("%d ",*it); puts("");//删除 return 0; }
set
#include<stdio.h> #include<iostream> #include<string.h> #include<queue> #include<stack> #include<list> #include<stdlib.h> #include<algorithm> #include<vector> #include<map> #include<set> using namespace std; int main() { int n,t; set<int > q; multiset<int > q1; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&t); q.insert(t); q1.insert(t); //插入 } printf("%d ",*q.find(100)); //multiset find 返回第一个 查找元素的的 位置 if(q.find(100)==q.end()) printf(" no find "); else printf("%d ",*q.find(100));// find 找不到 怎返回 end()的地址 return 0; }
string
#include<stdio.h> #include<iostream> #include<string.h> #include<queue> #include<stack> #include<list> #include<stdlib.h> #include<algorithm> #include<vector> #include<map> #include<set> using namespace std; int main() { char str[1000]; string s; scanf("%s",str); s=str; s+="asdf";// string 后直接添加字符串 int len=s.length();//长度 cout<<len<<endl; cout<<s.find('a')<<endl; //find 函数 返回下标 cout<<s<<endl; reverse(s.begin(),s.end()); cout<<s<<endl; reverse(s.end(),s.begin());// 将 end 置于前 cout<<s<<endl; int a; sscanf(str,"%d",&a); printf("%d ",a); sprintf(str,"%x",a); printf("%s ",str); // 两个常用的字符串转换函数 return 0; }
map
#include<stdio.h> #include<iostream> #include<string.h> #include<queue> #include<stack> #include<list> #include<stdlib.h> #include<algorithm> #include<vector> #include<map> #include<set> #include <fstream> using namespace std; struct node { int a;int b; bool operator < (const node &n) const { return n.a<a; } };//按node.a的值 从大到小 int main() { int n; map<node,int> q1; map<string,int> q; scanf("%d",&n); for(int i=0;i<n;i++){ string gg; cin>>gg ; q[gg]=i; } map<string ,int> :: iterator it; for(it = q.begin();it!=q.end();it++) cout<<(*it).first<<" "; cout<<endl; for(it = q.begin();it!=q.end();it++) cout<<(*it).second<<" "; cout<<endl; map<string,int>::reverse_iterator rit; for(rit = q.rbegin(); rit!=q.rend(); rit++) cout<<(*rit).first<<" ";// map 访问方式 first 访问 key second 访问 value cout<<endl; cin>>n; for(int i=0;i<n;i++){ int a;int b; cin>>a>>b; node c; c.a=a;c.b=b; q1[c]=i; } map<node,int>::iterator nit; for(nit=q1.begin();nit!=q1.end();nit++){ cout<<(*nit).second<<" "; } cout<<endl; return 0; }
queue
#include<stdio.h> #include<iostream> #include<string.h> #include<queue> #include<stack> #include<list> #include<stdlib.h> #include<algorithm> #include<vector> #include<map> #include<set> #include <fstream> using namespace std; struct cmp { bool operator () (const int &a,const int &b) { return a<b; } };//重载优先队列比较函数 int main() { int n,t; priority_queue<int,vector<int>,cmp> q; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&t); q.push(t); } while(!q.empty()){ int c=q.top(); printf("%d ",c); q.pop(); } return 0; }
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #include <string> #include <iostream> #include <map> #include <cstdlib> #include <list> #include <set> #include <queue> #include <stack> using namespace std; int main() { int n; set<int> q; int a[10000];int key; while(scanf("%d",&n)!=EOF){ for(int i= 0;i<n;i++) scanf("%d",&a[i]),q.insert(a[i]); scanf("%d",&key); int tem=lower_bound(a,a+n,key) - a ;//比key大的最小数的下标 找不到返回右边界(一个越界的位置) int tem1=upper_bound(a,a+n,key) - a; cout<<tem1<<endl; cout<<tem<<endl; set<int>:: iterator it=q.begin(); cout<<*q.lower_bound(key)<<endl;//比key大的最小数 } return 0; }