标签:逆序 long clu iterator etc bre 比较 div mic
大家都知道有些题只开单纯的数组实在太难写了,
所以STL是一个非常好的东西;
先介绍一下vector:
vector可以支持迅速的随机访问,但vector一般都在末尾进行删减;
#include<vector> 头文件,万能头是包含的
vector<int> a; 定义一个int型的vector
a.push_back(); 在末尾加上一个数
a.pop_back(); 删去末尾一个数
front 返回vector的第一个数,示例:int b=a.front(); 等价于*a.begin() 和 a[0]
back 返回vector的最后一个数,示例:int b=a.back(); 等价于*--a.end() 和 a[a.size()-1]
这是基础用法,vector可以用迭代器,这样就减少了访问数组的麻烦
如:
for(int i=0;i<a.size();i++)
cout<<a[i]<<endl;
for(vector<int>::iterator it=a.begin();it!=a.end();it++)
cout<<*it<<endl;
实际上,上面两个for循环是一样的
接下来让我们来看一些水题来更好的理解vector
3
1 7 5
5 7 1
#include<bits/stdc++.h> using namespace std; typedef long long ll; vector<ll> a; inline ll read() { ll a=0,f=1; char c=getchar(); while (c<‘0‘||c>‘9‘) {if (c==‘-‘) f=-1; c=getchar();} while (c>=‘0‘&&c<=‘9‘) {a=a*10+c-‘0‘; c=getchar();} return a*f; } int main() { ll n=read(); for(ll i=1,b;i<=n;i++) b=read(), a.push_back(b); for(ll i=a.size()-1;i>=0;i--) printf("%lld ",a[i]); }
很水的一题,请自行分析
4
1 2 3 3
3
3
#include<bits/stdc++.h> using namespace std; typedef long long ll; vector<ll> a; inline ll read() { ll a=0,f=1; char c=getchar(); while (c<‘0‘||c>‘9‘) {if (c==‘-‘) f=-1; c=getchar();} while (c>=‘0‘&&c<=‘9‘) {a=a*10+c-‘0‘; c=getchar();} return a*f; } int main() { ll n=read(); for(ll i=1,b;i<=n;i++) b=read(), a.push_back(b); ll m=read(); ll flag=0; for(ll i=0;i<a.size();i++) if(a[i]==m) { flag=1; printf("%lld",i+1); break; } if(!flag) cout<<"-1"; }
这一题要访问位置,用迭代器会比较麻烦
给你一个整数n和一个数列,这个数列保证从小到大排列,现要求将这个整数n插入到数列中,使新的数列仍然从小到大排列。
n<=100
2
4
1 3 4 5
1 2 3 4 5
#include<bits/stdc++.h> using namespace std; typedef long long ll; vector<ll> a; inline ll read() { ll a=0,f=1; char c=getchar(); while (c<‘0‘||c>‘9‘) {if (c==‘-‘) f=-1; c=getchar();} while (c>=‘0‘&&c<=‘9‘) {a=a*10+c-‘0‘; c=getchar();} return a*f; } int main() { ll m=read();ll n=read(); for(ll i=1,b;i<=n;i++) b=read(), a.push_back(b); ll flag=0; for(vector<ll>::iterator it=a.begin();it!=a.end()-1;it++) { if(!flag&&*it>m) { printf("%lld ",m); flag=1; } printf("%lld ",*it); } if(!flag) { ll aa=a.back(); if(m>=aa) printf("%lld ",aa), printf("%lld",m); else printf("%lld ",m), printf("%lld",aa); return 0; } printf("%lld",a.back()); }
这一题我这样写是为了防止最后一个输出的数后面出现空格
8
1 2 3 4 5 6 7 8
1
2 3 4 5 6 7 8 1
#include<bits/stdc++.h> using namespace std; typedef long long ll; vector<ll> a; inline ll read() { ll a=0,f=1; char c=getchar(); while (c<‘0‘||c>‘9‘) {if (c==‘-‘) f=-1; c=getchar();} while (c>=‘0‘&&c<=‘9‘) {a=a*10+c-‘0‘; c=getchar();} return a*f; } int main() { ll n=read(); for(ll i=1,c;i<=n;i++) c=read(), a.push_back(c); ll m=read();ll b=a[m-1]; for(ll i=m-1;i<a.size()-1;i++) a[i]=a[i+1]; a[a.size()-1]=b; for(ll i=0;i<a.size()-1;i++) printf("%lld ",a[i]); printf("%lld",a[a.size()-1]); }
5
7 2 3 4 5
2
9
7 9 2 3 4 5
#include<bits/stdc++.h> using namespace std; typedef long long ll; vector<ll> a; vector<ll> b; inline ll read() { ll a=0,f=1; char c=getchar(); while (c<‘0‘||c>‘9‘) {if (c==‘-‘) f=-1; c=getchar();} while (c>=‘0‘&&c<=‘9‘) {a=a*10+c-‘0‘; c=getchar();} return a*f; } int main() { ll n=read(); for(ll i=1,c;i<=n;i++) c=read(), a.push_back(c); ll x=read(),y=read(); for(ll i=0;i<x-1;i++) b.push_back(a[i]); b.push_back(y); for(ll i=x-1;i<a.size();i++) b.push_back(a[i]); for(ll i=0;i<b.size()-1;i++) printf("%lld ",b[i]); printf("%lld",b[b.size()-1]); }
5
1 2 3 4 5
3
1 2 4 5
#include<bits/stdc++.h> using namespace std; typedef long long ll; vector<ll> a; vector<ll> b; inline ll read() { ll a=0,f=1; char c=getchar(); while (c<‘0‘||c>‘9‘) {if (c==‘-‘) f=-1; c=getchar();} while (c>=‘0‘&&c<=‘9‘) {a=a*10+c-‘0‘; c=getchar();} return a*f; } int main() { ll n=read(); for(ll i=1,c;i<=n;i++) c=read(), a.push_back(c); ll x=read(); for(ll i=0;i<x-1;i++) b.push_back(a[i]); for(ll i=x;i<a.size();i++) b.push_back(a[i]); for(ll i=0;i<b.size()-1;i++) printf("%lld ",b[i]); printf("%lld",b[b.size()-1]); }
8
1 2 3 6 8 7 4 5
1 2 3 4 5 6 7 8
#include<bits/stdc++.h> using namespace std; typedef long long ll; vector<ll> a; inline ll read() { ll a=0,f=1; char c=getchar(); while (c<‘0‘||c>‘9‘) {if (c==‘-‘) f=-1; c=getchar();} while (c>=‘0‘&&c<=‘9‘) {a=a*10+c-‘0‘; c=getchar();} return a*f; } int main() { ll n=read(); for(ll i=1,c;i<=n;i++) c=read(), a.push_back(c); for(ll i=0;i<a.size();i++) for(ll j=0;j<a.size();j++) if(a[i]<a[j]) { ll c; c=a[i]; a[i]=a[j]; a[j]=c; } for(ll i=0;i<a.size()-1;i++) printf("%lld ",a[i]); printf("%lld",a[a.size()-1]); }
标签:逆序 long clu iterator etc bre 比较 div mic
原文地址:https://www.cnblogs.com/wzx-RS-STHN/p/12939459.html