读入优化与STL
读入优化
众所周知 ,C++ 中的输入是函数化的:scanf()
系列 .但是 scanf()
系列的占位符很是让人头疼,尤其是 long long
类型,而 cin/cout
系列最大的让人不满意之处便是太慢....
但是可以开挂!
std::ios::sync_with_stdio(false)
但是有时会莫名 \(RE\) ...而且当数据量很大时还是很慢,于是要自写函数,像这样:
inline int scanf(int& x)
{
x=0;int f=1,c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
x*=f;
}
当然有读入优化自然会有"输出优化" :
当然输出优化不是经常用
inline void printf(int x)
{
if(x<0){puctahr('-');x=~(x-1);}
int s[20],top=0;
while(x){s[++top]=x%10;x/=10;}
if(!top)s[++top]=0;
while(top)putchar(s[top--]+'0');
}
重载了scanf
和printf
,,,多谢C++的函数重载...
\(20180714\)
时间跳跃到2019年,昤昽回到pdyz给刚入门的学弟学妹们讲课。。。然而因为授课时间从原本计划的5天变成2天,因此原本计划中的STL并没有讲。。。只好挂在这里。。。
sort 函数:
int a[100];
sort(a+n,a+m);//对a[n]到a[m-1]这段区间的内容进行排序
sort(a+n,a+m,cmp);//对a[n]到a[m-1]这段区间的内容依照cmp函数提供的规则排序
vector
\(vector\)是一个不定长度的数组,可以像下面一样使用:
vector<int> v;//声明一个int类型的vector
v[i];//返回v中第 i+1 个元素
v.size();//返回v的长度
v.empty();//判断v是否为空
v.push_back(x);//向v的尾部添加一个元素x
v.pop_back();//删除v的尾部元素
v.push_front();//向v的首部添加元素(很慢,慎用)
v.back();//返回v的尾部元素
string
\(string\) 是一个“字符串”,C++为其提供了较多的运算。
string s;
s[x];//与数组类似
s.size();//返回s的长度
s.length();//同s.size();
s1+s2;//将s1与s2首尾相连
queue
\(queue\)是STL提供的队列,可以实现队列的基本操作
queue<int> q;
q.push(a);//向q的尾部添加一个元素
q.front();//得到q的队首元素但不删除
q.pop();//q的队首元素出队
q.empty();//返回q是否为空
stack
栈
stack<int> st;
st.push();//向栈顶压入一个元素
st.pop();//栈顶元素出栈
st.top();//返回栈顶元素
st.empty();//判断栈是否为空
STL还有很多东西,上面列出的vector、queue等也非如此简单,各位学弟学妹可以上网查阅。