原创 多線程編程入門及基本概念, 線程安全與鎖,原子操作及call_once

#include<iostream> #include<string> #include<thread> #include<unistd.h>//for getpid #include<pthread>//for pthread_

原创 STL源碼——關聯式容器及其底層紅黑樹實現(下) 之 紅黑樹的剖析(插入,刪除操作)

本文感謝並參考http://blog.csdn.net/hackbuteer1/article/details/7760584 可滑動右邊系統自帶目錄選擇性閱讀 紅黑樹概述 紅黑樹和AVL樹的區別在於它使用顏色來標記節點的高度,紅

原创 STL——空間配置器剖析(一級空間配置器、二級空間配置器的本質及運用場合,是如何用內存池去管理的)

一級空間配置器、二級空間配置器的本質及運用場合,是如何用內存池去管理的 研究了好久才寫好的,主要是二級配置器,大標題小標題什麼的可能沒有安排好,先 寫了原理上的內容,再剖析了各個函數源碼,各個目錄可以看csdn自帶的目錄(👉 如

原创 STL源碼——關聯式容器及其底層紅黑樹實現(上) 之 關聯式容器詳細介紹

在侯捷老師源碼剖析一書中對關聯式進行源碼剖析前先花了不少篇幅介紹紅黑樹的原理,這是因爲關聯式容器的底層依賴於RB_Tree實現。 因此想嘗試在下篇剖析紅黑樹的源碼,在此之前,先複習一下各個關聯式容器的方法及容器之間的不同之處或許對

原创 STL——heap(heap並不屬於STL容器組件)C++實現

heap並不歸屬於STL容器組件,它是個幕後英雄,扮演priority queue的助手,priority queue允許用戶以任何次序將任何元素放入容器內,但是取出時一定是從優先級最高的元素開始取,heap正是具有這樣的特性,適

原创 STL容器適配器之stack、queue的實現

stack stack是沒有迭代器的,而STL要求每一種容器都必須內置一個迭代器,因此stack不是一種容器。 棧是一種先進後出的數據結構,一個棧的插入、刪除或取值都只能在棧頂實現,在元素不彈出的前提下不能夠遍歷內部所有的元素。

原创 可以學學Golang、(Go的優勢及適合做什麼

1,關鍵字少,運維簡單 2,⭐原生支持高併發,GOROUTINE,協程 (進程是資源分配的最小單位,線程是CPU調度的最小單位) 一個線程可以有上千個協程,不是在CPU層面去調度的,是在用戶空間用Golang的一個調度器去調度不同

原创 動態規劃 ——正則表達式匹配,C++, 暴力動態規劃解法+加備忘錄解法

思路 不加備忘錄的暴力思路 主要是* 星號, 據題意 星號 肯定是在某個字符的後面,時刻記住動態規劃的主旨就是劃分成子問題,那我們就一個一個去比較,當發現有*號時,就將 星號 與其前一個字母看作一個子問題, (並銘記關注當下),

原创 動態規劃——C++做打家劫舍Ⅱ,接Ⅰ直接用降低空間複雜度的方法

思路 頭尾相連意味着頭尾只能搶一個,那我們可以把搶劫的區間分成兩個,[0, n-2]和[1, n-1],分別進行dp再取最大值 和Ⅰ一樣,重點是弄明白dp[i]在這邊即dp_i的意義,是表示從第i間房子開始搶能夠得到的最大的數值

原创 動態規劃——C++做編輯距離, 暴力dp(超時)+帶備忘錄解法

題目 兩個單詞 word1 和 word2,可以對一個單詞進行插入一個字符、刪除一個字符、替換一個字符三種操作,計算將 word1 轉換成 word2 所使用的最少操作數 。 思路 解決兩個字符串的動態規劃問題,一般都是用兩個指針

原创 Golang(2)——入門語法之基本語法(函數、變量、類型(自動推導、強轉)、流程控制 for、 if else、 switch、defer)

基本語法:包、函數、var變量、const常量、類型、流程控制、更多類型 包管理 go中沒有public、private、protected等訪問控制修飾符,它是通過字母大小表示能否被其他方訪問或者調用的,大寫的方法就表示是可以被

原创 STLvector源碼——實現框架、具體實現的詳細分段剖析(重點是insert_aux在指定位置插入元素和在指定位置插入n個元素的源碼)、vector實現的基本函數總結

VS2010的源碼真的讓人放棄,還是安安穩穩看侯捷老師的SGI 源碼(SGI vector) 實現框架 #include<iostream> #include<cstddef>//用到了size_t和ptrdiff_t usin

原创 動態規劃——C++做雞蛋掉落,簡單理解的但超出時間限制的dp,及優化後的二分dp

題目 N層樓,K個雞蛋,找樓層 F ,滿足高於 F 的樓層落下的雞蛋都會碎,從 F 樓層或比它低的樓層落下的雞蛋都不會破,問找到這個F需要測試的最小雞蛋數目 思路 dp的思路:找狀態,做選擇(max or min),窮舉選擇,思考

原创 動態規劃——C++做打家劫舍Ⅰ,暴力動態解法+備忘錄解法+降低空間複雜度解法

house robberⅠ 思路: 對每一個當下的房子只有兩個選擇:搶或者不搶,搶的話下一個判斷要在當下+2的位置,不搶的話可以去面對下一間房子 狀態選擇,清晰明瞭:dp[i] = max(dp[i+2]+nums[i], dp[

原创 STL deque 源碼——deque特點、實現框架、源碼分段剖析、常用函數總結(下)之源碼剖析

源碼剖析 首先定義每個緩衝區的長度: inline size_t __deque_buf_size(size_t n, size_t sz) { return n != 0 ? n : (sz < 512 ? size