您的位置:首页 > 其它

一些语言方面的技巧

2014-11-27 18:44 267 查看
1.数字转string

int x;
string id;
stringstream ss;
ss << x;
ss >> id;




2.字符串转数字

int num;
string s;
stringstream ss(s);
ss>>num;


char str[];
sscanf( str, "%d", &num );         // 将字符串转换成整数
sscanf( str, "%f", &floatnum );    // 将字符串转换成浮点数


char str[];
floatnum = atof(str);   // 字符串转浮点数
num = atoi(str);        // 字符串转整数


若字符串为string类型,则要用c_str()方法获取其字符串指针
string str;
floatnum = atof(str.c_str());   // string转浮点数
num = atoi(str.c_str());        // string转整数




3.结构体内嵌比较函数的规则

如下:

struct node
{
    int l,r;
    bool operator <(const node &a)const{
        return r < a.r;
    }
};


此时左边那个r表示自己这个r,如果排序的话,会按r值从小到大排序,因为sort默认就是从小到大的。

而优先队列就不同了,优先队列中默认是大值优先,所以大小关系相反,比如下面这个:

struct SELL
{
    int price,num;
    bool operator <(const SELL &a)const
    {
        return price>a.price;
    }
};
priority_queue<SELL> que;


那么这个优先队列是按price小的优先出队。

总之记住:结构体中直接写比较函数一定是左边那个裸的r表示当前this值,如果r<a.r,那么就是从小到大排序,而优先队列恰恰相反 就行了。



4.排序vector结构体最好内嵌比较函数

比如内嵌:

bool operator<(const node &B)const
{
      return r<B.r;
}


时 sort(v.begin(),v.end()) 比 sort(v.begin(),v.end(),cmp) 快。 而且是超时的点。 注意!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: