原创 【陷阱代碼】c++ 第二篇 c++11新特性及偏冷門語法場景 面對審查代碼

很遺憾,原始代碼未仔細整理,只留有分享給別人的截圖,來源於學習c11時的構想 陷阱點: 1、lamda[i]傳值是隻讀複製,不能改,++無效,要用i+1 2、如果加了mutable之後,是可以改了,但改的是副本 3、如果用了引用,la

原创 【c++11 新特性應用】利用bind實現通用的混合任務線程池

先簡單認識一下std::bind,詳細資料查閱相關資料,這裏不囉嗦,假設你已經具備了理論知識: auto f1 = bind(&fun_int, 3,std::placeholders::_1); 這名話的意思是給fun_int綁定2個參

原创 constexpr說明以及g++4.8.2實測分析

數組定義必須是常量或與常量等價(不隨着運行狀態變化而發生值變化,在編譯階段就能確定的 c++11增加了constexpr來對函數聲明爲返回常量,可以用於定義數組,但是實測結果如下,應該是g++編譯器擴展吧,而且除constexpr外不加g

原创 【初級算法剖析】超大文件獲取順序相關數據問題

一類問題,典型問題一般如下: 1、給出超大文件,比如100T,每一行是一個訪問ip/查詢關鍵字等,計算頻率最高的前100個。 2、給出超大文件,比如100T,第一行是一個值,計算第N個。 特點: 1、數據非常大,無法用內存加載。 2、數

原创 【陷阱代碼】c++ 第一篇 簡單但卻常見

主要來源是自己多年工程經驗以及審查代碼的總結,一些和常見的網上資料原理相同,但是實際場景經常比看起來複雜,一個疏忽就中了。 以下這個代碼,都不是基於冷門語法刻意考查基本功的,真正解決起來要靠警覺,就好比熟練的司機更容易出車禍一樣。 bo

原创 【理論實踐】size_t和std:size_t可能是不同的類型定義,只是定義爲相同的類型

這個很少被人意識到,2個分別對應到c頭文件定義和c++頭文件定義,日常使用沒有影響是因爲先包含的會使後續包含定義觸發條件編譯,而且經常using namespace std;使不區分std:size_t。做爲一個優秀的代碼輸出者,要嚴謹的

原创 【g++bug】 vector.erase (const_iterator)調用報錯

報錯如下:no matching function for call to ‘std::vector<TYPE>::erase(__gnu_cxx::__normal_iterator<const int*, std::vector<TY

原创 【理論實踐】#define 和const帶給開發者的影響區別

#define STR 1.76333333預編譯 const double STR = 1.76333333; 主要區別: 1、處理階段不同 預編譯可以簡單的理解爲替換代碼,基本不會出錯,靠前。 常量定義是合法的變量只是不可修改值,發生

原创 用實例代碼理解一下c++11”定義析構函數阻止合成移動”

先普及一下基本知識: 1、移動:int &&a = b;  將b移動給a,會避免一些對象複製,移動之後,b就沒有用了。 2、析構:對象釋放時,執行的清理函數。 原理很好理解:如果定義了析構函數,則說明清理工作有一些個性化,成員數據如果執行

原创 基於c++11泛型編程開發一個LeetCode本地開發測試組件

LeetCode初次接觸感覺還不錯,重點是可以對比討論共同實現的一段代碼,https://leetcode.com。 處理複雜問題不適合在OJ上直接開發,本地調試更簡單。暫時(我想應該會有)未發現可以直接拿來運行的框架,自己簡單實現一個,

原创 【初級算法剖析】計算字符串需要的哈夫曼長度

算法要求和答案並不複雜,不復制,不直接貼結果,而是加一些個人分析,面向非算法專業的人員。 背景:          哈夫曼編碼,構造一個二叉樹,左支代表編碼0,右支1,從根節點到葉子節點就是編碼,這樣每個樹葉節點都是具有唯一不等長編碼的,

原创 處理流式數據中MAX N問題

題目:要求找出數據流中最大的5個數 思路:構建一個5個元素的最小堆,循環處理,每次和堆頂元素比較即可 #include <stdio.h> #include <stdlib.h> #include <assert.h> inline v

原创 給出進程啓動區間計算任意時間點並行進程數量

題目:原題不公開,需求是給出大量進程的啓動和結束時間,計算任意時間點進程併發數。進程數有限,查詢次數很大。關閉開區間: [啓動,關閉) 思路:先將時間區間點排序,然後遍歷計數,遇到啓動+1,遇到關閉-1,時間點切換時,就得出上個值到當前值

原创 對比理解一下STL的自定義比較方法

STL模板定義比較操作的方法不止一種,之前見過別人用時總是變換方式直到編譯不出錯爲止,STL的錯誤提示非常長和複雜,不理解透徹將是耗時的。 實際上STL的模板提供了2種完全獨立的方法,一種是使用<運算符來比較,一種是通過傳入的可調用對象用

原创 只能進行賦值,+1,固定次數的循環三種原子操作,只能操作0和正整數

要求:只能進行賦值,+1,固定次數的循環三種原子操作,只能操作0和正整數 簡單做個思路轉換即可。 #include <iostream> using namespace std; int my_add(int x, int y) {