主页

高级数据结构设计力扣题目总结

写在前面 下面的这些数据结构都用到了链表, 可见链表在数据库/缓存等底层构件中的重要作用. 跳表: 数组+链表节点 1206. 设计跳表 - 力扣(LeetCode);(高级数据结构, 数据库常用) 需要设计多级结构以便降低查找的时间复杂度, 相当于在一般链表中采用了二分查找的思想, 空间换时间. class Skiplist { static constexpr int level = 8; struct Node { int val; vector<Node*> next; Node(int _v) : val(_v) { next.resize(level, nullpt...

阅读更多

C++并发编程实战笔记(一)线程概念与基本控制

写在前面 在C++ 中实现多线程还是很容易的, 不像C的pthreads接口, 下面来总结一下C++多线程的一些基本操作, 包括线程的创建, 合并, 分离, 获取ID等操作, 主要参考了C++并发编程实战(第二版)的第一二章, 这本书应该是C++并发必看的经典了. 另外参考: std::thread; 一些有用的程序 用于辅助 #include <iostream> #include <cassert> // 断言 #include <chrono> // 计时 #include <thread> // 线程 using namespace std; using namespace std::chrono; ...

阅读更多

C++内存模型与程序运行分区

写在前面   作用域 生命周期 内存区域 全局内存 整个文件 应用程序的生命周期 全局区 静态内存 声明它的函数内部 应用程序的生命周期 全局区 自动内存(局部内存) 声明它的函数内部 限制在函数执行时间内 栈区 动态内存 由引用该内存的指针决定 直到内存释放 堆区 内存模型与虚函数 虚表

阅读更多

近来学习和生活的一些思考

时刻激励自己,如果没有动力,那么尝试来看看下面这段话; 如果你不去奋斗,你的代价是什么? 如果你认为教育的成本太高,那你就看看无知的代价; 如果你不去努力奋斗,那你就尝试看看你为贫穷付出的代价,别人能用钱去解决的问题,你将不得不用时间、健康、尊严、甚至生命去解决; 当我们的父母逐渐老去,我们还没有出人头地的时候,你才会发现什么叫无助!大多数人憧憬希望,但是不会为了希望去努力;大多数人讨厌拼命,但是会为了攥在手里的东西去拼命; 所以,为了目标奋斗吧,少年! 对于程序员来说,通过各种经验和实践解决问题的能力才是你的 核心竞争...

阅读更多

C++字符串+和push_back创建字符串的性能比较

写在前面 刷力扣(415. 字符串相加)时候发现这样一个现象: 使用 s1 = static_cast<char>(c) + s1; 要比先push_back, 然后reverse慢很多: s2.push_back(static_cast<char>(c)); // .. reverse(s2.begin(), s2.end()); 那么问题出在哪呢? 猜测: 第一种方法应该是等号右边先通过重载的加法运算符创建了一份字符串的临时对象, 然后(调用拷贝赋值运算符)赋值给s1, 最后还要销毁临时对象, 这就导致每次都要进行赋值和销毁, 时间成本就上来了.. 而第二种都只是原地操作, 对内存的影响应该也只局限于动态扩容了. 测试 #inclu...

阅读更多

C++类内静态成员类外初始化情况分析与示例

写在前面 最近看到了这样一个题: 静态数据成员定义之后,必须在类外进行初始化 看完了Effective系列之后, 我会给出答案: 错误. 为什么呢? 下面来深入分析一下. 非常量静态数据成员 看下面这个例子, 对于非常量静态成员来说, 必须在类内声明, 类外初始化. class P { public: static int cma; // 类内声明 }; int P::cma{}; // 必须类外初始化 void t1() { P p; cout << P::cma << endl; // 0 cout << p.cma << endl; // 0 } 这个没什么好说的, 因为...

阅读更多

栈与队列力扣题目汇总

写在前面 栈入门 主要用于深度优先搜索, 模拟递归过程, 以及一些特定解法的题目(例如单调栈, 括号匹配, 逆波兰表达式求值等), 基本实现 通过C风格数组很容易实现栈(但是固定了长度), 在C++STL中也有实现(通过deque), 不过基本的栈操作还是要用数组来完成, 要了解每一个API的实现过程. 基本题目 20. 有效的括号 - 力扣(LeetCode); // 💩一样的代码 class Solution { public: bool isValid(string s) { if (s.size() & 1) return false; stack<char> st; ...

阅读更多

Total views.
您是Zorch的第 个小伙伴
Hits