- 数字与字符串之间的相互转换
- 重载函数模板
- 小根堆与大根堆的定义
1. 数字与字符串之间的相互转换
- 数字转字符串
int u=110;
char s1[110];
//将u转换为字符串
sprintf(s1,"%d",u);//char
printf ("%s\n",s1);
string s2;
s2=to_string(u);//string
cout<<s2<<'\n';
char s3[110],s4[110],s5[110];
sprintf(s3,"0x%X",u);
sprintf(s4,"%x",u);//10进制转换成16进制
//如果输出大写的字母是sprintf(str,"%X",a)
sprintf(s5,"o%o",u);//10转8进制,八进制o或0开头,0容易混淆用得少了
printf ("%s\n%s\n%s\n",s3,s4,s5);
- 字符串转数字
char s1[110]={"12345678910"};
string s2="12345678910";
long long a,b,c;
sscanf (s1,"%lld",&a);//char[]
b=stol(s2.c_str());//string 必须使用.c_str()
//stoi,stol分别对应int long long
cout<<a<<'\n'<<b<<'\n';
2. 重载函数
struct my_pair {//通过重载小于号 实现pair
int x,y;
// bool operator < (const my_pair& a) const{//就当模板背吧 升序
// if (x!=a.x) return x<a.x;
// return y<a.y;
// }
bool operator < (const my_pair& a) const{//就当模板背吧 倒序
if (x!=a.x) return x>a.x;
return y>a.y;
}
};
ps: invalid declarator before …报错一般是结构体后面没加分号
练手题acw.429
3. 小根堆与大根堆的定义
int/double/long long等c++自带类型
priority_queue <int> q;//默认大根堆
priority_queue <int> q1;//int的大根堆定义方法
priority_queue <int,vector <int>,greater<int> >q2;//int的小根堆定义方法
int main (){
int n=9;
for (int i = 1; i <= n; i ++ ){
q1.push(i),q2.push(i);
}
printf ("大根堆的堆顶:%d\n",q1.top());//9
printf ("小根堆的堆顶:%d\n",q2.top());//1
}
pair的定义
typedef pair<int, int> pii;
priority_queue <pii> q1;
priority_queue <pii,vector <pii>,greater<pii>> q2;
int main (){
int n=9;
for (int i = 1; i <= n; i ++ ){
q1.push({i,n-i+1}),q2.push({i,n-i+1});
}
printf ("大根堆的堆顶:%d %d\n",q1.top().first,q1.top().second);//9 1
printf ("小根堆的堆顶:%d %d\n",q2.top().first,q2.top().second);//1 9
}
自定义的结构体实现小根堆大根堆
struct my_pair1 {//通过重载小于号 实现pair
int x,y;
bool operator < (const my_pair1& a) const{//升序 大根堆
if (x!=a.x) return x<a.x;
return y<a.y;
}
};
struct my_pair2 {//通过重载小于号 实现pair
int x,y;
bool operator < (const my_pair2& a) const{//降序 小根堆
if (x!=a.x) return x>a.x;
return y>a.y;
}
};
typedef my_pair1 pii1;
typedef my_pair2 pii2;
priority_queue <pii1> q1;
priority_queue <pii2> q2;
int main (){
int n=9;
for (int i = 1; i <= n; i ++ ){
q1.push({i,n-i+1});
q2.push({i,n-i+1});
}
printf ("大根堆的堆顶:%d %d\n",q1.top().x,q1.top().y);//9 1
printf ("小根堆的堆顶:%d %d\n",q2.top().x,q2.top().y);//1 9
}