【条记】C语言转C++

[复制链接]
发表于 2025-12-13 00:57:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
网课链接:【C语言 转 C++ 简朴教程】 https://www.bilibili.com/video/BV1UE411j7Ti/?p=27&share_source=copy_web&vd_source=4abe1433c2a7ef632aeed6a3d5c0b22a
网课老师B站id:别喷我id 
视频总时长:01:55:27
以下条记是我通过此网课整理 发起先看完网课 再用这个条记举行复习
网课老师同时整理了头脑导图 可以在视频简介获取
  1. /*
  2.   用C++刷算法的不同之处:
  3.     1、兼容C语言
  4.     2、丰富的STL库
  5.     3、string很好用
  6.     4、时间上要差一些
  7. */
  8. #include<iostream>  // 输入输出流 input output
  9. #include<cstring>  //即#include<string.h>
  10. // C++中,C语言中的头文件都可以通过去掉.h,在开头加c实现
  11. #include<string>
  12. #include<vector>
  13. #include<set>
  14. #include<map>
  15. #include<stack>
  16. #include<queue>
  17. #include<bitset>
  18. #include<algorithm> // sort()函数的头文件 algorithm算法
  19. #include<cctype>
  20. using namespace std;
  21. // 使用名称空间 避免不同厂商使用的函数名称重复导致的误用
  22. // 所以每家厂商将自己的函数封装在自己设定的名称空间里
  23. //结构体&引用&和传值
  24. //结构体
  25. struct stu {
  26.     string name;
  27.     int age;
  28. };
  29. // stu a[10];  直接用stu命名变量
  30. // 引用: 引用的时候会把初始变量也改变 约等于c语言里的指针不写*
  31. // 传值: 传值只改变函数里的变量 不会带到函数外
  32. bool cmp1(int x, int y) {
  33.     return x > y;
  34. }
  35. // 返回值为真 那么x放在y前面
  36. // 返回值为假 交换两个数
  37. bool cmp2(stu a, stu b) {
  38.     if (a.age != b.age)
  39.         return a.age < b.age;
  40.     else
  41.         return a.name < b.name;
  42. }
  43. // 以年龄为第一限制条件从小到大排序
  44. // 年龄相同就参考第二限制条件 按名字的ACSII码从小到大排序
  45. int main()
  46. {
  47.     //输入输出等基本
  48.     int n;
  49.     cin >> n;
  50.     // 输入cin(记in)
  51.     cout << "wohaoshuai!" << ++n << endl; // 输出cout(记out) 换行endl("\n")
  52.     // cin cout的运算速度会低于scanf和printf
  53.     /*
  54.     若没有提前使用名称空间
  55.     也可以在main函数中调用的时候使用以下格式:
  56.     std::cin
  57.     std::cout
  58.     std::endl
  59.     */
  60.     cout << "*******************" << endl;
  61.     // bool和const
  62.     for (int i = 0; i < 10; i++)
  63.         cout << n << " ";
  64.     // 可在循环里定义变量i
  65.     cout << endl;
  66.     bool flag = true;
  67.     bool flag2 = -1;
  68.     bool flag3 = 0;
  69.     // bool将值判为0或1(非0即为1)
  70.     cout << flag << " " << flag2 << " " << flag3 << endl;
  71.     const int MAX = 150;
  72.     // const定义的常量无法进行更改 可看做宏定义
  73.     // MAX = 100; 此表达式会报错
  74.     cout << MAX << endl;
  75.     cout << "*******************" << endl;
  76.     // 字符串
  77.     // 定义字符串
  78.     string s1 = "hello";
  79.     string s2 = " world!";
  80.     string s3 = s1 + s2;
  81.     cout << s3 << endl;
  82.     getline(cin, s1);
  83.     // cin只能输入空格前的字符 getline可以输入一整行 但要声明头文件string
  84.     cout << s1 << endl << s1.length() << endl; // 此长度不包括\0
  85.     // 子串
  86.     string s1_sub = s1.substr(1, 2);
  87.     // s.substr(n1,n2)(从下标为n1的字符开始,取n2个字符)
  88.     // s.substr(n1)(从下标为n1的字符开始取,取完)
  89.     // 【字符串下标从0开始算】
  90.     cout << s1_sub << endl;
  91.     cout << "*******************" << endl;
  92.     // STL篇
  93.     // vector 矢量向量/动态数组/不定(可变)参数组
  94.     vector<int>v; // 定义一个长度为0的空数组
  95.     v.resize(10);  // v.resize(length); 重新分配数组大小
  96.     for (int i = 0; i < 10; i++)
  97.         v[i] = i;
  98.     for (int i = 0; i < 10; i++)
  99.         cout << v[i] << " ";
  100.     v.push_back(11); // 给数组扩充一个新空间 给首个空位赋值为11
  101.     for (int i = 0; i < 11; i++)
  102.         cout << v[i] << " ";
  103.     cout << endl << v.size() << endl;
  104.     vector<int>d(10, 2); // 定义一个长度为10,每个值都为2的数组
  105.     d.size(); //变量名.方法
  106.     for (auto p = d.begin(); p != d.end(); p++)  // b.end()的位置是最后一个元素的后一位
  107.         cout << *p << " ";
  108.     // 迭代器 自动遍历一遍数组中所有的数据
  109.     cout << "*******************" << endl;
  110.     // set 集合 里面的元素各不相同 而且元素会按照从小到大排序
  111.     // unordered_set 省去排序过程(无序)的集合 要用#include<unordered_set>
  112.     // unordered_set<int>s;  这样定义 其它调用方法和set一模一样
  113.     set<int>s;
  114.     s.insert(1);
  115.     s.insert(2);
  116.     s.insert(3);
  117.     for (auto p = s.begin(); p != s.end(); p++)
  118.         cout << *p << ' ';
  119.     cout << endl;
  120.     cout << (s.find(2) != s.end()) << endl;
  121.     // 集合中找2 找到后返回2的位置 和s.end()的位置不同即返回1 说明找到了
  122.     cout << (s.find(4) != s.end()) << endl;
  123.     // 集合中找4 找到后返回4的位置 和s.end()的位置相同即返回0 说明未找到
  124.     s.erase(1);  // 删除1
  125.     cout << (s.find(1) != s.end()) << endl;
  126.     cout << "*******************" << endl;
  127.     // map 键值对 自动将所有的键值对按照键(ASCII)从小到大排序
  128.     // unordered_map 省去排序过程(无序)的键值对 要用#include<unordered_map>
  129.     // unordered_map<int>m;  这样定义 其它调用方法和map一模一样
  130.     map<string, int>m;
  131.     m["hello"] = 2;
  132.     m["world"] = 3;
  133.     m["ilovewuhan"] = 5;
  134.     m["ha"] = 6;
  135.     /*
  136.     struct{
  137.         string key;
  138.         int data;
  139.     }
  140.     */
  141.     cout << "hello:" << m["hello"] << endl;
  142.     for (auto p = m.begin(); p != m.end(); p++)
  143.         cout << p->first << ":" << p->second << endl;
  144.     // p->first为键 p->second为值
  145.     cout << "map的长度为:" << m.size() << endl; // size容器
  146.     cout << "*******************" << endl;
  147.     // 栈和队列
  148.     // stack 栈
  149.     stack<int>sta;
  150.     sta.push(1);
  151.     sta.push(2);
  152.     sta.push(3);
  153.     sta.pop();
  154.     sta.push(76);
  155.     cout << sta.top() << endl;
  156.     cout << "栈的长度为:" << sta.size() << endl;
  157.     // 无法使用迭代器 栈只能获得栈顶元素
  158.     // queue 队列
  159.     queue<int>q;
  160.     for (int i = 1; i <= 10; i++)
  161.         q.push(i);
  162.     q.pop();
  163.     cout << "队首为:" << q.front() << endl << "队尾为:" << q.back() << endl;
  164.     cout << q.size() << endl;
  165.     cout << "*******************" << endl;
  166.     // bitset 字符数组 从二进制的低位到高位依次为b[0]、b[1]……
  167.     bitset<5>b(19);  // 5个二进制位 将19转化为二进制 即10011
  168.     // bitset<5>b; 即初始化为00000
  169.     // bitset<5>b("11"); 直接赋二进制的值 即为00011
  170.     cout << b << endl; //直接输出这个字符
  171.     for (int i = 0; i < b.size(); i++)
  172.         cout << b[i] << " ";
  173.     // 从低位到高位一个一个输出
  174.     cout << endl;
  175.     cout << "是否有1:" << b.any() << endl;
  176.     cout << "是否不存在1:" << b.none() << endl;
  177.     cout << "1的个数:" << b.count() << endl;
  178.     cout << "b中元素个数:" << b.size() << endl;
  179.     cout << "下标为i的元素是不是1:" << b.test(0) << endl;
  180.     b.flip(1); // 第1位取反(是从右边开始数的第0位、第1位)
  181.     // b.flip() 所有位取反
  182.     b.reset(2); // 第2位归零
  183.     // b.reset() 所有位归零
  184.     cout << b << endl;
  185.     unsigned long z = b.to_ulong(); // 转化为十进制
  186.     cout << z << endl;
  187.     string e = "0110101";
  188.     bitset<5>c(e, 0, 5); // bitset<二进制位数>c(字符串,位置,取的位数)
  189.     // 即bitset<5>c("01101");
  190.     cout << "*******************" << endl;
  191.     // sort函数 对一个数组进行排序(默认从小到大)
  192.     // vector是容器 需要用v.begin()表示头 v.end()表示尾
  193.     // int arr[]使用arr表示数组的首地址 arr+n表示尾部
  194.     vector<int>g(10);
  195.     for (int i = 9; i >= 0; i--)
  196.         g[i] = 9 - i;
  197.     for (int i = 0; i < 10; i++)
  198.         cout << g[i] << " ";
  199.     cout << endl;
  200.     g.push_back(-1);
  201.     sort(g.begin(), g.end()); // [ ) 左闭右开
  202.     for (int i = 0; i < 11; i++)
  203.         cout << g[i] << " ";
  204.     cout << endl;
  205.     sort(g.begin(), g.end(), cmp1); // cmp 自定义排序规则(需另外定义函数)
  206.     for (int i = 0; i < 11; i++)
  207.         cout << g[i] << " ";
  208.     cout << endl;
  209.     stu a[10];
  210.     for (int i = 0; i < 10; i++)
  211.         cin >> a[i].name >> a[i].age;
  212.     sort(a, a + 10, cmp2);
  213.     for (int i = 0; i < 10; i++)
  214.         cout << a[i].name << " " << a[i].age << endl;
  215.     cout << "*******************" << endl;
  216.     // cctype头文件的函数
  217.     char f = 'A';
  218.     cout << "isalpha" << isalpha(f) << endl; // 字母?
  219.     cout << "islower" << islower(f) << endl; // 小写字母?
  220.     cout << "isupper" << isupper(f) << endl; // 大写字母?
  221.     cout << "isalnum" << isalnum(f) << endl; // 字母or数字?
  222.     cout << "isspace" << isspace(f) << endl; // space \t \r \n?
  223.     char f1 = tolower(f); // 转化为小写字母
  224.     cout << f1 << endl;
  225.     char f2 = toupper(f); // 转化为大写字母
  226.     cout << f2 << endl;
  227.     cout << "*******************" << endl;
  228.     // C++11篇
  229.     // C++11的解释:2011年官方带来的新的语法标准 新增了很多特性   
  230.     // dev c++使用C++11里的函数需要设置
  231.     // Settings->Compiler->C++11那一行勾选上->OK
  232.     // auto声明  可以让编译器根据初始值直接推断变量的类型
  233.     auto x = 19;
  234.     auto y = 1.8;
  235.     // 用auto定义的时候一定要初始化赋值
  236.     // 迭代器用到auto(可用迭代器的有vector set map)
  237.     // 基于范围的for循环
  238.     int k[5] = { 1 };
  239.     for (int i : k) // i作为参数不会带出for循环 类似于函数 除非给i改成&i取地址
  240.         i++;
  241.     for (int i : k)
  242.         cout << i << " ";
  243.     cout << endl;
  244.     vector<int>k2(10, 1);
  245.     for (auto i : k2) // 相当于迭代器 所有的容器都可以通过这种方式循环
  246.         cout << i << " ";
  247.     cout << endl;
  248.     // to_string 将数字转化为字符变量
  249.     string o = to_string(123.1); // 这边浮点型会自动保留到小数点后六位
  250.     cout << o << endl;
  251.     printf("%s\n", o.c_str()); // printf输出的形式
  252.     // stoi和stod 将字符串转化为其它变量
  253.     // 记忆方法:stoi (string to int)   stod (string to double)
  254.     // 还有stof stold stol stoll stoul stoull等一系列
  255.     int r = stoi("123");
  256.     cout << r << endl;
  257.     double t = stod("12.34");
  258.     cout << t << endl;
  259.     return 0;
  260. }
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表