C++知识点01

本文记录一下与C++相关的知识点:

C++中set.find(x)!=set.end()

参考资料:

  1. Why is it necessary to to use set.find(x) != set.end() while finding an element.

C++中int和string的转换

参考资料:

  1. C++ int与string的相互转换(含源码实现) - 君莫笑 - 博客园

C++中string的reserve和resize

用于给容器分配空间以及resize容器空间

参考资料:

  1. string的reserve和resize_51CTO博客_vector resize和reserve

C++中fill

对一个容器进行填充

参考资料:

  1. C++ 中 fill() 的使用_51CTO博客_c++ fill

C++中size_t类型

参考资料:

  1. size_t 这个类型的意义是什么? - 知乎

C++风格规范

参考资料:

  1. C++ 风格指南 - 内容目录 — Google 开源项目风格指南

C++按值、引用和指针传递

参考资料:

  1. C++ 值传递、指针传递、引用传递详解 - Geek_Ling - 博客园

C++中auto关键字

参考资料:

  1. auto (C++) - 维基百科,自由的百科全书
  2. C++ auto 关键字的使用 - 腾讯云开发者社区-腾讯云

C++中移位操作

参考资料:

  1. C++移位运算符详解 - shrimp_929 - 博客园
  2. 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;
//假设两个元素为a1, a2;则a1 ^ a2 = eor。a1和a2从最右边即最低位开始第一个不同的位可以通过以下操作得到:
int lowbit = eor & -eor;
//由于可以通过异或抵消两个重复元素,故通过下面的异或可以得到两个单元素中的一个
for(int num: nums){
if(lowbit & num){
result[0] ^= num;
}
}
//由result[0] ^ result[1] = eor, 故result[1] = result[0] ^ eor
result[1] = result[0] ^ eor;
return result;
}
};

问题:int类型最小值-2147483648和最大值2147483647绝对值差一,故上述eor ^= -eor操作会导致溢出。
解决方案:将eor声明为long long类型,即long long eor=0

C++数据类型

参考资料:

  1. C++ 数据类型 | 菜鸟教程

C/C++中的头文件

参考资料:

  1. 《Linux C编程一站式学习》第20章
  2. 如何组织好 C 的头文件
  3. 请大家说说 结构体 是放在头文件中好? 还是放在源文件好呢?-CSDN社区
  4. C 头文件 | 菜鸟教程
  5. 函数实现不放在头文件的原因,及何时可以放头文件的情况 - 绿色冰点 - 博客园

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;
}

参考资料:

  1. c++中 . 和 -> 的区别是什么? - iSZ - 博客园
  2. C++中的.和::和:和->的区别_define_SGZ的博客-CSDN博客

C++中的&和*

参考资料:

  1. C++ 指针运算符(& 和 *) | 菜鸟教程
  2. c++ - C++中的&和&&_个人文章 - SegmentFault 思否
  3. C++中&的功能 及 用法 - konglingbin - 博客园

C++结构体构造函数

参考资料:

  1. C++ - 结构体构造函数使用总结 - _starsky - 博客园
  2. C++链表及其创建

C++头插法和尾插法

参考资料:

  1. 单链表的头插法与尾插法代码实现及详解_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;
}
};

参考资料:

  1. C++结构体完全攻略(超详细)
  2. C++ - 结构体构造函数使用总结 - _starsky - 博客园

C++编译器在Windows上的配置

参考资料:

  1. Downloads - MinGW-w64
  2. Package: mingw-w64-x86_64-gcc-fortran - MSYS2 Packages
  3. Package: mingw-w64-x86_64-gcc - MSYS2 Packages

C++中数组的使用

参考资料:

  1. C++ 多维数组 | 菜鸟教程
  2. C++ 传递数组给函数 | 菜鸟教程
  3. 数组引用、数组做参数 - keepgoing18 - 博客园
  4. C++二维数组初始化的形式 - 腾讯云开发者社区-腾讯云

C++中.h头文件和.cpp源文件应该写什么

参考资料:

  1. C++中头文件(.h)和源文件(.cpp)都应该写些什么 - fenghuan - 博客园
  2. c - undefined reference error in VScode - Stack Overflow
  3. c++ - Error with multiple definitions of function - Stack Overflow

C++代码风格

参考资料:

  1. Menci’s Code Style for OI | Menci’s OI Blog
  2. Google C++ Style Guide
  3. C++ 风格指南 - 内容目录 — Google 开源项目风格指南

C++ ipch文件夹和.ipch文件

C:\Users\26899\AppData\Local\Microsoft\vscode-cpptools\ipch目录下有打量了的C++ Precompiled headers,这些可以安全删除

参考资料:

  1. visual studio 2010 - Is it safe to delete the “ipch” folder - Precompiled headers? - Stack Overflow

C++中&和&&的区别

||&&为逻辑运算符;|&为位运算符。

参考资料:

  1. | 和 ||,& 和 && 的区别

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;
}
}

参考资料:

  1. dictionary - C++ Loop through Map - Stack Overflow