语言&&函数
memset()是以字节 为单位,初始化内存块
memset | int型内存块 |
---|---|
0 | 0 |
-1 | -1 (FFFFFFFFFFFFFFFF,64位) |
0x3f、0x3f3f、0x3f3f3f…… | 1061109567 (3F3F3F3F) |
-0x3f、-0x3f3f、-0x3f3f3f…… | -1044266559 |
注意: 1 | 16843009(1010101)HEX |
运算符重载
struct Edge{
int from,to,dist;
Edge() {}
Edge(int x,int y,int w):from(x),to(y),dist(w){}
bool operator < (const Edge & e) const {//后面的const必须加上
return (dist<e.dist);
}
//一种写法
friend Edge operator + (const Edge &a,const Edge &b){
return Edge(a.from,b.to,a.dist+b.dist);
}
//另一种写法
Edge operator + (const Edge & a){
Edge res;
//res.from=this->from;
res.from=from;
res.to=a.to;
//res.dist=this->dist+a.dist;
res.dist=dist+a.dist;
return res;
}
};
Edge edges[maxn];//这里有Edge型的变量edges 前面Edge结构体必须加上Edge() {}
运算符的优先级
注意
+,−
+
,
−
>
>>
>>
和
<<
<<
<script type="math/tex" id="MathJax-Element-3"><<</script> >
& >
^ >
| >
&& >
|| >
?:
整数、浮点数转字符串
经测试,会在末尾加’\0’
sprintf()函数打印和格式控制到一个char中,还可以连接多个字符串,功能比较强大
但是其不支持转二进制 如果想把数字转为二进制串 可以使用itoa的参数 但貌似该函数被取消了。。
所以还是手写吧
字符串转整数、浮点数
string重载的+=
string& operator+= (const string& str);
string& operator+= (const char* s);
string& operator+= (char c);
string& operator+= (initializer_list<char> il);
reverse函数的使用
#include<bits/stdc++.h>
using namespace std;
char str[10000010];
int main()
{
srand(time(0));
string s="";
for(int i=0;i<1e7;++i){
s+='a'+rand()%26;
}
strcpy(str,s.c_str());
double a=clock();
reverse(s.begin(),s.end());
cout<<s<<endl;
double b=clock();
cout<<b-a<<endl;
reverse(str,str+strlen(str));
cout<<str<<endl;
double c=clock();
cout<<c-b<<endl;
return 0;
}
1e7的串大概需要100ms逆置 char[]比string 稍快(大概1.5倍)
判断一个数是否是完全平方数(立方,四次方同理)
ll is_sqrt(ll x)
{
ll t=sqrt(1.0*x)+0.5;
return t*t==x ? t :-1 ;
}