主页

深度探索c++对象模型笔记(第一章)关于对象

写在前面 这部分内容主要是一个引子, 包含以下经典的问题, 介绍了 C++在对象模型这方面的设计与演进. 数据成员和成员函数的内存布局 虚函数的内存布局 继承模型, 父类和子类的内存布局 C++对象模型 两种类数据成员: 静态. 非静态 三种类成员函数: 静态 非静态 虚 几种模型 简单对象模型: 一个对象是一系列的槽(slot), 每个 slot 指向一个成员, 成员按照其声明顺序各被指定一个 slot, 每个成员(数据/函数)都有自己的 slot; 表格驱动对象模型: 把所有与成员相关的信息抽取出来, 放在一个数据成员表和成员函数表中, 类对象本身内含指向这两个表格的指针. 成员...

阅读更多

C++定制比较规则的各种方法总结

写在前面 写一下刷题中常用的 C++ 算法库函数 sort(), lower_bound()等函数以及优先队列等需要自己定制比较规则的方法. #include <algorithm> utils 输出 template <typename T> // nd-array can use this ostream& operator<<(ostream& os, const vector<T>& v) { for (auto i : v) os << i << " "; return os << '\n'; } void print_...

阅读更多

贪心力扣题目总结

前置知识 基本贪心问题 难点在于找到能使结果一直逼近最优的一种方法(路径), 然后不断重复找到全局最优. (个人理解) 455. 分发饼干; class Solution { // 直观但是 O(N^2) public: int findContentChildren(vector<int>& g, vector<int>& s) { if (s.empty()) return 0; sort(g.begin(), g.end()); sort(s.begin(), s.end()); int n = s.size(), ans{}; bool use...

阅读更多

Gdb调试方法总结

写在前面 Ubuntu 20.04 x86_64 gdb: 9.2 总结一下 C/C++ 代码调试的艺术, 这本书讲了 gdb 和 vc 的调试方法, 虽然有一些小错误, 但是不影响看, 突击面试确实是很方便的. 啃文档的话可以, 不过时间来不及了, 虽然技术是要慢慢沉淀的… 当然我还看了 软件调试的艺术 这本书, 中外作者的文笔还是有所不同的.. gdb 主要功能 总览: 支持的功能 描述 命令 断点管理 设置断点, 查看断点, 条件断点 b(break), condition 调试执行 逐语句...

阅读更多

C++在main函数之前或之后执行的函数

写在前面 总结一波面试题 测试环境 Ubuntu+clang 之前执行 #include <iostream> using namespace std; __attribute((constructor)) void before() { // C cout << "before main 1\n"; } int a = []() { // C++ 11 cout << "before main 2\n"; return 0; }(); int t1() { cout << "before main 3\n"; return 1; } static int p1 = t1()...

阅读更多

Jekyll博客配置mermaid支持以及暗黑主题适配

写在前面 最近忙里偷闲, 搞一下博客, 由于写一些笔记需要做时序图和类图, markdown 有现成的支持: mermaid-js, 网站, 这里就直接拿来主义了, 我的博客是基于 jekyll-TeXt-theme 的, 里面内置了 mermaid 开关, 但是版本已经比较老旧了, 下面来看看如何更新配置以及适配暗黑主题(如果用默认主题会导致线条显示对比度不明显). 方法 开启支持 先改_config.yml文件: ## => Markdown Enhancements ############################## ## Mathjax mathjax: true # false (default), true mathjax_autoNumber: ...

阅读更多

操作系统导论笔记 并发

写在前面 全部代码: ostep_cases;在 Linux+MacOS 下运行通过. 下面的代码都是基于 C 的, 当然为了不分文件测试我用了 C++ 的命名空间, 实际使用的话可以用类封装一下 API, 使用 RAII 惯用法, 避免忘记释放锁, 这部分内容在之后的文章中给出. 线程(thread) 基本概念与术语 临界区: 访问共享资源的一段代码, 资源通常是一个变量或者数据结构 竞态条件(race condition): 出现在多个执行线程大致同时进入临界区时, 都试图更新共享的数据结构, 会导致异常的结果. 不确定性: 程序由一个或多个竞态条件组成, 程序的输出因运行而异, 具体取决于哪些线程在何时运行. 这就导致了不确定的结果 互斥原语:...

阅读更多

多路归并的一些题目总结

写在前面 参考了: 【多路归并】从朴素优先队列到多路归并; 基本问题 88. 合并两个有序数组; 双指针归并: class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { // 反着遍历插入数组 for (int i{m + n - 1}, j{m - 1}, k{n - 1}; i >= 0; --i) { if (j < 0) nums1[i] = nums2[k--]; ...

阅读更多

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