原创 C++關鍵字mutable和explicit

mutuble:使得變量可以修改,不能修飾被static和const的變量。 一般在類的常方法中,儘管常方法不允許我們修改類中的任何變量,但是有時候由於實際場景的需求,還是需要對某一或某幾個變量進行修改,這時候就可以使用mutab

原创 x86體系早期的實模式下的內存分段的地址映射

實模式:程序員可以直接在物理地址上進行編寫程序,此時還沒有操作系統進行內存的管理。 實模式下的CPU架構爲:8086,16位數據總線,20位的地址總線。可尋址空間大小爲2^20=1M,但是由於數據總線僅僅支持16位,而由CPU法出

原创 二叉樹:二叉樹的直徑

二叉樹直徑的定義:二叉樹中路徑的最大長度 二叉樹中路徑的最大長度,可以理解所有節點的左右子樹高度之和的最大值。假設二叉樹有n個節點,編號爲{a1,a2,…,an}, 其對應的左右子樹的高度之和爲H = {h1,h2,h3,…,hn

原创 二叉樹:統計二叉樹同時擁有左右孩子節點的個數

二叉樹遍歷的應用 struct node { int val; node *left, *right; }; int dfs(node *root) { if (!root) return 0; if (root->le

原创 四大查找ASL的總結

一、一般線性表的順序查找 ASL成功 = (n+1)/2 ASL失敗 = (n+1) 二、有序線性表的順序查找 ASL成功 = (n+1)/2 ASL失敗 = (n+1)/2 + n/2 三、二分查找 二分查找的ASL成功和ASL

原创 SGI STL二級空間配置器--內存池源碼剖析

一、STL容器一級空間配置器 通過SGI STL vector底層源碼逐步分析內存池。 事實上,在我們使用STL容器時,有一點沒有關心到的是我們默認使用了標準庫裏邊的空間配置器,當然標準這樣的做法是爲了減少學習成本,但是當我們深入

原创 進程通信(二)消息隊列(System V 消息隊列)

一、System V 消息隊列簡介 消息隊列:消息隊列的本質是由Linux內核創建用於存放消息的鏈表,並且其功能是用來存放消息的,所以又稱之爲消息隊列。 在Linux的不同進程中,包括有血緣的進程和無血緣的進程,都可以通過Linu

原创 記錄:vim支持系統剪貼板

sudo apt-get intall vim-gui-common 點贊 收藏 分享 文章舉報 樂行僧丶 發佈了245 篇原創文章 · 獲贊 54 · 訪問量 13萬

原创 二叉樹:在孩子兄弟鏈表表示的樹中求葉子節點的個數

typedef struct CSNode { int val; CSNode *firstchild, *nextsibling; } CSNode, *CSTree; int dfs(CSTree *root) {

原创 Linux: errno合集,各種errno對應的出錯問題,方便查詢

#define EPERM 1 /* Operation not permitted */ #define ENOENT 2 /* No such file or directory */ #define ESRCH

原创 fork與緩衝區的問題

(1)在分析這個問題之前,先得熟悉一下緩衝區以及標準I/O中printf相關的問題。 printf行緩衝的概念以及刷新緩衝區的條件 (2)關於fork,在本例分析中只需要記住一點,fork之後子進程的地址空間中是拷貝了父進程的緩衝

原创 單源最短路徑--floyd算法

void floyd() { for (int k=1; k<=n; ++k) { for (int i=1; i<=n; ++i) { for (int j=1; j<=n; ++j) { if (i ==

原创 C++空間配置器

空間配置器的作用: (1)將對象構造和內存開闢進行分離。 (2)將對象析構和內存釋放進行分離。 空間配置器的主要函數: 1.allocate:進行內存的開闢,底層調用的就是malloc。 2.deallocate:進行內存的釋放,

原创 佔位1024

寫什麼,還沒想好

原创 鄰接表和逆鄰接表

鄰接表作爲圖的一種存儲方式,在存儲稀疏圖上相對於鄰接矩陣有相當大的空間節省。如一個稀疏圖的頂點個個數爲n,邊數爲e。用鄰接矩陣存儲需要n^2空間,而真正進行存儲的只有2e個空間, 剩下的n^2-2e都浪費了。但是對於鄰接表來講,存