C++刷题知识点

加速输入输出

当碰到ACM模式下的笔试题,使用C++的cincout流,通常会比C原生scanfprintf慢很多。原因是C++为了兼容scanfprintf,做了很多设计。但通常而言,使用cincout会比scanfprintf顺手很多。为了兼顾感觉和效率,可以在代码中添加以下两行,关闭对C的兼容。此时,C++原生输入输出就得到了大幅加强。

std::ios::sync_with_stdio(false);
std::cin.tie(0);

获取整数的最大值和最小值

C++的有符号整数使用4字节进行存储,取值范围为-2^322^32-1。有时需要取到这类极值。在C语言下可以使用#include<limits>,C++下转换成#include<climits>.

最大值:INT_MAX

最小值:INT_MIN

以上二值直接使用即可.

取余和取整

有时候需要对数字进行取余等操作,C++的取余和取整操作如下

int sum = 23;
cout << sum / 10 << endl; // 输出 2
cout << sum % 10 << endl; // 输出 3

Auto自动推断类型

Java在遍历数组的等操作时,既可以使用访问数组下标的方式,也可用Iteable迭代器的方式。C++中的Auto可以提供类似Java迭代器写法的语法糖。

例如:

// 数组下标访问方式
int q[3] = {1,2,3};
for(int i = 0; i < 3; i++) cout << q[i] << endl;

// Auto关键字自动推断取值
for(auto i:q) cout << i << endl;

列表初始化

列表初始化的特性是在C++11之后生效,目的是方便对结构体的变量初始化。LeetCode官方推荐使用列表初始化的方式,对链表、树等数据结构初始化。

// Leetcode 官方例子
// 二叉树
 struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),right(right) {}
 };

// 链表
 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) {}
};
posted @ 2022-06-06 23:18  DiiD  阅读(161)  评论(0编辑  收藏  举报