原创 深入理解計算機系統 虛擬存儲器

操作系統中的三個抽象: 1.文件是對i/o設備的抽象 2.虛擬存儲器是對程序存儲器的抽象(包括內存,磁盤等) 3.進程是對正在運行的程序的抽象(處理器、虛擬存儲器) 虛擬存儲器,是由N個字節組成的,它存在於磁盤上(注意,是磁盤上)。而內

原创 各種排序及內省排序

分別寫了選擇、冒泡、插入、堆、歸併、快排的實現,以及基於快排的內省排序,並於STL的排序相比較。 //algo.h #pragma once int min(int x, int y) { return x < y ? x : y;

原创 mutex 與 CAS

CAS: compare and swap CAS 操作包含三個操作數 —— 內存位置(V)、預期原值(A)和新值(B)。如果內存位置的值與預期原值相匹配,那麼處理器會自動將該位置值更新爲新值。否則,處理器不做任何操作。無論哪種

原创 動態規劃的一些總結

首先,動態規劃適用於什麼情況呢?我個人的想法是,先考慮數據最簡單的情況,逐步增大數據,觀察是否存在遞推關係。 說一說遞歸關係。 第一種思路:由當前狀態推導以後的狀態,①可以確定下一個狀態②可以確定下以後的多個狀態③可能確定以後的

原创 thread join和detach

轉載自:點擊打開鏈接 線程狀態: 在一個線程的生存期內,可以在多種狀態之間轉換,不同的操作系統可以實現不同的線程模型,定義許多不同的線程狀態,每個狀態還可以包含多個子狀態,但大體來說,如下幾種狀態是通用的: 1)就緒:參與調度,等待

原创 單例模式及銷燬

通過單例模式可以保證系統中一個類只有一個實例。即一個類只有一個對象實例。 單例模式的要點有三個:一是某個類只能有一個實例;二是它必須自行創建這個實例;三是它必須自行向整個系統提供這個實例。 從具體實現角度來說:一是單例模式的類只提供私有的

原创 stl源碼剖析 第四章vector實現

template<typename T, typename Alloc = alloc> class vec { public: typedef T value_type; typedef T* point; typedef T*

原创 C++11 信號槽 signal/slot

實現了一個線程安全的信號槽,還是利用智能指針的特性,一方面信號槽的多線程的讀寫是安全的,另一方面採用了弱回調技術(基於weak_ptr<T>,槽的析構)。隨手畫了一張結構圖,。此處應該@陳碩大大,《Linux多線程服務端編程:使用mudu

原创 374螺旋矩陣.381螺旋矩陣Ⅱ

給定一個包含 m x n 個要素的矩陣,(m 行, n 列),按照螺旋順序,返回該矩陣中的所有要素。 樣例 給定如下矩陣: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 應返回 [1,2

原创 深入理解計算機系統 鏈接

鏈接的兩個任務: 1.符號解析:將每個符號引用與可重定位目標文件中符號表的一個確定的符號聯繫起來。 2.重定位:將每個符號定義與一個存儲器位置定義聯繫起來,並修改所有對這些符號的引用,使他們指向這個存儲器位置。 目標文件:1.可重定位目

原创 博弈論 sg函數

http://baike.baidu.com/link?url=RvHq88XaFKNd0XJC97k2JWvIJSPZiLKvVhVnA_yCPR_K-cZhb2lLIjG3XHatW8VeyzLxbbOvYWqEtcc2RSdls_7

原创 函數模版、重載和特化的匹配規則

函數匹配規則: 1.對於一個調用,其候選函數包括所有模版實參推斷成功的函數模版實例(頂層const可忽略;對於非引用的形參,數組或函數指針轉化到到指針) 2.可行函數(模版和非模版),按類型轉換排序 3.如果恰有一個函數比其它都更匹配,則

原创 185矩陣的之字形遍歷

給你一個包含 m x n 個元素的矩陣 (m 行, n 列), 求該矩陣的之字型遍歷。 樣例 對於如下矩陣: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10, 11, 12] ] 返回 

原创 81.數據流中位數

數字是不斷進入數組的,在每次添加一個新的數進入數組的同時返回當前新數組的中位數。 中位數是排序後數組的中間值,如果有數組中有n個數,則中位數爲A[(n-1)/2]。比如:數組A=[1,2,3]的中位數是2,數組A=[1,19]

原创 stl迭代器模式

迭代器(Iterator)模式,又叫做遊標(Cursor)模式。GOF給出的定義爲:提供一種方法訪問一個容器(container)對象中各個元素,而又不需暴露該對象的內部細節。 從定義可見,迭代器模式是爲容器而生。很明顯,對容器對象的訪問