C++知识点及常用用法

各种输入输出

函数指针

函数指针

realloc

realloc

动态数组

int* p=new int[100];
delete []p;

不能单独删除p[1]的地址,只能整体删除

类内使用sort

类内的函数有一个隐含的变量,this指针
参考

自定义的类使用优先队列

参考
优先队列使用自定义的比较函数时,比较函数写在类里面,且要在构造函数里面指明优先队列的实现方式,一般使用vector

运算符重载

本质上是一个函数,返回值,函数名字是operator加上待重载的运算符,后面跟上函数参数和函数体

class Data{
public:
    int data;
    int index;
    Data(){

    }
    Data(int a,int b):index(a),data(b){

    }
};
bool operator<(Data a,Data b){
    if(a.index==b.index)
        return a.data<b.data;
    else
        return a.index<b.index;
}
bool operator>(Data a,Data b){
    return !(a<b);
}

int main() {
    vector<Data> data;
    data.emplace_back(1,2);
    data.emplace_back(3,4);
    data.emplace_back(3,1);
    sort(data.begin(),data.end(),greater<Data>());
    for(auto& d:data)
        cout<<d.index<<" "<<d.data<<endl;
    return 0;
}

sort中不使用greater时默认使用less
sort函数、优先队列等需要重载小于号的重载函数,重载参数里面应不应该用引用???
尤其是优先队列更是存疑
力扣347题重载方式,加不加引用反正都能通过

字符串按某个字符分割

int main() {
    string inputStr("zx zx zx zx zx zx");
    std::stringstream ss(inputStr);
    std::string str;
    int i=0;
    while (getline(ss, str, ' ')){
        cout<<str<<endl;

    }
    return 0;
}

判断两字符串是否有相同字符

参考
以下代码仅适用于只含有小写字母的情况。如果字符串中含有128种字符则应将num1和num2的数据类型修改为long long。因为int只有32位
两字符串含有相同种类的字符时认为相同,数量可以不一样

bool judge(string s1,string s2){
    int num1=0,num2=0;
    for(int i=0;i<s1.size();++i)
        num1=num1|1<<(s1[i]-'a');
    for(int i=0;i<s2.size();++i)
        num2=num2|1<<(s2[i]-'a');
    cout<<bitset<32>(num1)<<endl;
    cout<<bitset<32>(num2)<<endl;
    if((num1&num2)==0)
        return false;
    else
        return true;
}

int main() {
    cout<<judge("abc","def");
    return 0;
}
//00000000000000000000000000000111
//00000000000000000000000000111000
//1

位运算

参考
与运算:
1.将某些位置零 0101&1100=0100 与零得零,与一不变
2.取特定位 上面的方法就固定的取出了前两位
3.判断奇偶数 a&1==0偶数,否则奇数
或运算:
1.将某些位置一 0101|0011=0111 或零不变,或一得一
异或运算^相同为0,不同为1
1.翻转某些位 0101^0011=0110 异或零不变,异或1翻转
2.交换两个数

void Swap(int &a, int &b){
    if (a != b){
        a ^= b;
        b ^= a;
        a ^= b;
    }
}

无穷大与整形范围

auto max = INT32_MAX;
auto inf = -std::numeric_limits<float>::infinity();
cout<<inf;

原码反码补码

正数的三种码都是相同的
负数的反码是符号位不变,其余取反,补码是反码+1
补码与真值间的转换公式:
在这里插入图片描述
各种数字在计算机内部都是补码存储,所以LeetCode中的0508题,给出的补码形式,有些不能直接使用stoi。stoi是按公式计算int,如果想转换成负数,s中应有负号。

按进制输出数字

按进制输出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值