C++ 字符串分割 用过python语言的同学肯定知道,字符串split是一个非常好用的工具,但是很可惜的是C++并没有这样的函数((string, char) => vector<string>)供我们调用 这里我们来说一下用流实现的方法 首先明确流是什么? 流是一个对象,他创建了目标与源的连接。流可以从源获取信息,或者向目标地提供信息 对输入流来说,主要从中提取一些东西 operator>> 对输出流来说,主要将某些东西压入其中 operator<< C++有一个用于连…
C++ 字符串分割 用过python语言的同学肯定知道,字符串split是一个非常好用的工具,但是很可惜的是C++并没有这样的函数((string, char) => vector<string>)供我们调用 这里我们来说一下用流实现的方法 首先明确流是什么? 流是一个对象,他创建了目标与源的连接。流可以从源获取信息,或者向目标地提供信息 对输入流来说,主要从中提取一些东西 operator>> 对输出流来说,主要将某些东西压入其中 operator<< C++有一个用于连…
嵌套注释 这个问题来自《C Traps and Pitfalls》 请编写一个测试程序,要求无论是对允许嵌套注释的编译器,还是对不允许嵌套注释的编译器,该程序都能正常编译(无错误消息出现),但是这两种情况下程序执行的结果却不相同。 提示:在用双引号括起的字符串中,注释符 /* 属于字符的一部分,而在注释中出现的双引号 "" 又属于注释的一部分 首先你可能会想,什么是嵌套注释 从编译器的角度来说,就是当处理注释的过程中,是允许继续读入 /* */ 这样的符号的 比如一个字符串 /*/**/ , 对于可以嵌套注释的编译…
#include <stdio.h> int main() { int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; printf("%p\n%p\n", a[0], &a[0]); printf("%p\n%p\n%p\n%p\n", a[0] + 1, (&a[0] + 1), (&a[0]) + 1, a + 1); int (*p)[3] = &a[0]; int (*q) = a[0]; // printf("%p\n%p", ) prin…
莫里斯遍历 有关二叉树的遍历算法 非递归,无额外空间,时间复杂度O(n) 空间复杂度O(1) 很巧妙的遍历算法 核心思想就是利用树节点中的空指针 考虑非递归算法,如果我们不用栈的话,最主要的问题就是遍历完一个节点的左子树后怎么回到这个节点并遍历他的右子树 在遍历左子树的时候,最后一个遍历的节点一定是二叉树中序遍历中,当前节点的前一个节点 也就是当前节点左子树的最右边的节点 我们可以把这个前驱节点的右子树设为当前节点,这样遍历完左子树的时候,也就是遍历完这个前驱节点的时候,我们可以通过先前设置的那个指针回到当前节点,…
排序 区分的主要依据就是算法是否是基于比较的 leetcode排序 算法可视化 图是leetcode题解上的 这里不打算具体的说计数排序和桶排序,因为思路较为简单 代码均在leetcode上测试过,可以放心的使用 选择排序 class Solution { public: vector<int> sortArray(vector<int>& nums) { int n = nums.size(); for (int i = 0; i < n; i++) { int minn =…