0%

C++知识点归纳

基本运算

  1. 变量自身参与运算简便写法
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // 完整写法
    int a
    a = a + 1; a = a - 5; a = a*2; a = a / 8; a = a % 3;
    // 简便写法
    a += 1; a -= 5; a *= 1; a /= 8; a %= 3;
    // 当运算常数为1时,可写作
    a++; a--;
    // 两个+在前表示用加之后结果参与其他运算,在字母后面表示现参与其他运算再自加;
    // 减号同理
  2. 字符和数字之间的转换, ‘0’-‘9’ 的字符 -‘0’ 可转换为等值的数字;反之,0-9 数字 +’0’ 即等于对应的字符
    1
    2
    3
    4
    5
    6
    7
    #include <string>
    #include <iostream>

    // 把字符串的每一位数字相加
    string str = "1326538"
    int ret = 0;
    for ( int i = 0; i < str.length(); i++) ret += ( str[i] - '0' );
  3. 开平方,以及数字的指数运算
    1
    2
    3
    4
    #include <cmath>
    int m;
    // pow(int n, number a)
    pow(m, 0.5);
  4. 逻辑取反运算符 !,逻辑与&&,逻辑或||
  5. 变量类型转换
    1
    2
    3
    4
    // to float
    int sum = 922;
    int count = 76;
    (float)sum/count;

字符串

  1. 字符串截取
    1
    2
    3
    #include <string>
    // pos is the start index, count is the whole length;
    string.substr(pos, count);
  2. 字符串反转
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // 1.使用C的strrev函数
    char charArray = "hello world";
    strrev(charArray);

    // 2.使用<algorithm>中的reverse
    #include <string>
    #include <algorithm>

    string str = "hello world";
    reverse(str.begin(), str.end());

    // 上面两个函数都会直接修改原字符串内容,
    // 若不想改变原字符串,需要拷贝后再反转
  3. 获取字符串长度
    1
    2
    3
    4
    #include <string>
    string str;
    int len1 = str.size();
    int len2 = str.leng();
    4.在字符串固定位位置插入字符 ``
    1
    2
    3
    4
    5
    6
    7
    #include <string>
    string ret;
    // string.insert(pos, count, char*count);
    // pos = the index the char is to be inserted
    // count = the number of the char to be inserted
    // the inserted char
    ret.insert(0, 2, "hi");
  4. 字符串中单个字符的替换
    1
    2
    3
    4
    5
    6
    #include <algorithm>
    #include <string>

    string psd="llll00000";
    replace(psd.begin(), psd.end(), '1', '@');
    replace(psd.begin(), psd.end(), '0', '%');

结构体

  1. 使用结构体数组单元或结构体变量对结构体指针进行赋值时,必须要使用取址符号。(一般数组则可以不用)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef struct{
    string name;
    char gender;
    string id;
    short grade;
    } Student;

    Student stu[100];
    Student *p_stu = &stu[0];
  2. 结构体变量及结构体指针的元素访问
    1
    2
    3
    4
    5
    6
    Student stu = {'Mike', 'M', '10023', 35};
    Student *p_stu = &stu;

    stu.gender; // 结构体变量的元素访问
    p_stu->name; // 结构体指针的直接访问
    (*p_student).grade; // 结构体指针取内容后再访问

输入输出

cin和cout

  1. 使用cin和cout需要导入头文件 iostream ;
  2. 使用 cout 输出“ endl ”表示换行;
  3. 通过 cin 读入输入内容时自动以 空格 作为变量分割;
  4. 通过 cout 输出多个变量时,中间不会自动添加任何内容。
    1
    2
    3
    #include <iostream>
    cin >> stu.name >> stu.gender >> stu.id >> stu.grade;
    cout << stu.name << " " << stu.id << endl;
  5. cout 输出格式控制
    1
    2
    3
    4
    #include <iostream>
    // 控制输出小数点位数,四舍五入
    // 注意,如果小数位数不足或输出为整数,不会补0
    cout.precision(3) // keep 2 num after the point

map & hash表

  1. map 文件中的 map 类,存储键值对,使用树结构存储
    1
    2
    3
    4
    #include map

    map<string, int> Map;
    Map["wuwu"] = 8;
  2. 用 unordered_map 来表示 hash map,使用哈希存储,查找速度更快。
    1
    2
    3
    4
    #include unordered_map

    unordered_map<string, int> hashMap;
    hashMap["haha"] = 0;

其他

  1. 必须要声明变量空间,一般小型文件直接 using namespace std; 使用标准命名空间即可。