本文记录一下与C++相关的知识点:
C++中set.find(x)!=set.end()
参考资料:
- Why is it necessary to to use set.find(x) != set.end() while finding an element.
C++中int和string的转换
参考资料:
- C++ int与string的相互转换(含源码实现) - 君莫笑 - 博客园
C++中string的reserve和resize
用于给容器分配空间以及resize容器空间
参考资料:
- string的reserve和resize_51CTO博客_vector resize和reserve
C++中fill
对一个容器进行填充
参考资料:
- C++ 中 fill() 的使用_51CTO博客_c++ fill
C++中size_t类型
参考资料:
- size_t 这个类型的意义是什么? - 知乎
C++风格规范
参考资料:
- C++ 风格指南 - 内容目录 — Google 开源项目风格指南
C++按值、引用和指针传递
参考资料:
- C++ 值传递、指针传递、引用传递详解 - Geek_Ling - 博客园
C++中auto关键字
参考资料:
- auto (C++) - 维基百科,自由的百科全书
- C++ auto 关键字的使用 - 腾讯云开发者社区-腾讯云
C++中移位操作
参考资料:
- C++移位运算符详解 - shrimp_929 - 博客园
- C++ 运算符 | 菜鸟教程
C++中溢出
以leetcod260为例,如下为有问题的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Solution { public: vector<int> singleNumber(vector<int>& nums) { vector<int> result(2, 0); int eor = 0; for(int num: nums) eor ^= num; int lowbit = eor & -eor; for(int num: nums){ if(lowbit & num){ result[0] ^= num; } } result[1] = result[0] ^ eor; return result; } };
|
问题:int
类型最小值-2147483648
和最大值2147483647
绝对值差一,故上述eor ^= -eor
操作会导致溢出。
解决方案:将eor
声明为long long
类型,即long long eor=0
。
C++数据类型
参考资料:
- C++ 数据类型 | 菜鸟教程
C/C++中的头文件
参考资料:
- 《Linux C编程一站式学习》第20章
- 如何组织好 C 的头文件
- 请大家说说 结构体 是放在头文件中好? 还是放在源文件好呢?-CSDN社区
- C 头文件 | 菜鸟教程
- 函数实现不放在头文件的原因,及何时可以放头文件的情况 - 绿色冰点 - 博客园
C++中.
和->
->
主要用于对类类型的指针访问类的成员,.
主要用于对类类型的引用对象访问类的成员。例如:
1 2 3 4 5 6 7 8 9 10 11 12
| struct ListNode{ int val; ListNode *next; ListNode(int x): val(x), next(nullptr) {} }
int main(){ ListNode* dummy1 = new ListNode(-1); ListNode dummy2(1); cout << dummy1->val << endl; cout << dummy2.val << endl; }
|
参考资料:
- c++中 . 和 -> 的区别是什么? - iSZ - 博客园
- C++中的.和::和:和->的区别_define_SGZ的博客-CSDN博客
C++中的&和*
参考资料:
- C++ 指针运算符(& 和 *) | 菜鸟教程
- c++ - C++中的&和&&_个人文章 - SegmentFault 思否
- C++中&的功能 及 用法 - konglingbin - 博客园
C++结构体构造函数
参考资料:
- C++ - 结构体构造函数使用总结 - _starsky - 博客园
- C++链表及其创建
C++头插法和尾插法
参考资料:
- 单链表的头插法与尾插法代码实现及详解_51CTO博客_单链表尾插法代码
C++结构体的初始化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include <bits/stdc++.h> using namespace std;
struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next) : val(x), next(next) {}; ListNode(vector<int>& nums){ ListNode dummy(-1); ListNode* curNode = &dummy; for(int num: nums){ curNode->next = new ListNode(num, nullptr); curNode = curNode->next; } val = dummy.next->val; next = dummy.next->next; } };
|
参考资料:
- C++结构体完全攻略(超详细)
- C++ - 结构体构造函数使用总结 - _starsky - 博客园
C++编译器在Windows上的配置
参考资料:
- Downloads - MinGW-w64
- Package: mingw-w64-x86_64-gcc-fortran - MSYS2 Packages
- Package: mingw-w64-x86_64-gcc - MSYS2 Packages
C++中数组的使用
参考资料:
- C++ 多维数组 | 菜鸟教程
- C++ 传递数组给函数 | 菜鸟教程
- 数组引用、数组做参数 - keepgoing18 - 博客园
- C++二维数组初始化的形式 - 腾讯云开发者社区-腾讯云
C++中.h
头文件和.cpp
源文件应该写什么
参考资料:
- C++中头文件(.h)和源文件(.cpp)都应该写些什么 - fenghuan - 博客园
- c - undefined reference error in VScode - Stack Overflow
- c++ - Error with multiple definitions of function - Stack Overflow
C++代码风格
参考资料:
- Menci’s Code Style for OI | Menci’s OI Blog
- Google C++ Style Guide
- C++ 风格指南 - 内容目录 — Google 开源项目风格指南
C++ ipch文件夹和.ipch文件
在C:\Users\26899\AppData\Local\Microsoft\vscode-cpptools\ipch
目录下有打量了的C++ Precompiled headers,这些可以安全删除
参考资料:
- visual studio 2010 - Is it safe to delete the “ipch” folder - Precompiled headers? - Stack Overflow
C++中&和&&的区别
||
和&&
为逻辑运算符;|
和&
为位运算符。
参考资料:
- | 和 ||,& 和 && 的区别
C++遍历map
1 2 3 4 5
| for(auto i = map_s.begin(); i != map_s.end(); i++){ if(map_t[i->first] != i->second){ return false; } }
|
参考资料:
- dictionary - C++ Loop through Map - Stack Overflow