原文章:
此文章为作者本人搬运至该网站。
一、cin和cout的解锁:
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); 的作用和注意事项-优快云博客
用于提升cin与cout的运行速度与效率。
因为c++为了与c语言进行兼容,有一定的性能损失,cin与cout的速度就远不及scanf和printf了,不过只要使用这行代码:
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); //放在main函数里面的第一行位置
就可以关闭这种兼容,提升速度,目的是避免可能出现的运行超时。
如:
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
return 0;
}
不过在使用它之后要注意几点:
1.不能再把cin、cout与scanf、printf、getchar、cin.getline()一同使用了。
2.不能再用 cout<<endl 了,而应该改用 cout << '\n'。
二、用signed main代替int main:
【C++疑问】signed main 和 int main 的区别?_signed int main-优快云博客
看上面这个文章即可。
一句话总结:当#define int long long时,int main不能成立了,于是就换成signed main。
三、根据数组结构体里面的某个元素对所有结构体进行排序:
间隔这么长时间,我才发现我还有个sort的问题没解决:
那就是sort不能直接对存放结构体的数组进行排序啊!
原因毕竟很简单,结构体内部有多个元素,如果不指定是哪个元素,那么又如何排序呢?
因此需要如下代码:
struct node {
elemtype x;
}node[N];
//1.使用函数自定义排序,定义比较函数
bool cmp(node a, node b) {
//按结构体里面的x值降序排列
return a.x > b.x;
}
sort(node, node + n, cmp); // 只能接受 以函数为形式的自定义排序规则,无法接受以结构体为形式的自定义排序规则
// 2. 或者使用匿名函数自定义排序规则
sort(node, node + n, [](node a, node b) {
return a.x > b.x;
});
这个我建议用上面哪个,毕竟好记嘛。
在这里面,a.x就成为了结构体中的某个元素。
就通过这个元素对数组中所有的结构体进行排序。