一份C++學習資源,咬牙切齒地好用呀
多年以後,你已經是一名技術總監,有一個美麗的妻子,兩個孩子;你已經擁有了現在的你想都不敢想的一切;那時,你也一定會忘記,今天這篇教程,如同一顆石子,鋪就過你前進的路。

下面是我們的老師根據現有資源整理的一個C++學習路徑。通過使用 C++ 語言實現 Web 伺服器,Markdown 解析器,記憶體池以及 Docker 容器管理工具等,學習並實踐 C++ 程式設計基礎,C++ 11/14 標準,C++ 影象處理及增強現實技術。完成本路徑所有教程,將能夠使用 C++ 獨立實現複雜的應用程式。
“成為程式設計大牛要一門好語言加一點點天分。一門好語言,一點點天分,再加一份堅持。要是天分少,光靠堅持也行。”
基礎知識
- Linux 基礎入門(新版)
2. Vim編輯器
3. Git 實戰教程
4. GDB 簡明教程
本教程的正確食用姿勢:區別於目前所有主流教程,這類教程的核心就是動手跟著文件說明,在線上的Linux系統中一步一步地敲出基礎知識,各種有趣專案;走出只看書、看視訊卻不動手的禁區,你會比別人學的更快的,放心。
入門專案
使用 C++實現 OpenGL GLUT 實現一個簡單的太陽系行星系統,將涉及一些三維圖形技術的數學基礎、OpenGL 裡的三維座標系、OpenGL 裡的光照模型、GLUT 的鍵盤事件處理。
2. C++實現運動目標的追蹤
利用 OpenCV 來實現對視訊中動態物體的追蹤。進行本教程學習時,您需要先完成 C++實現太陽系行星執行系統的相關實驗,才能進行之後的學習。

使用 C++對銀行排隊服務進行模擬,以事件驅動為核心思想,手動實現模板鏈式佇列、隨機數產生器等內容,進而學習概率程式設計等知識。
4. 1小時入門增強現實技術
基於OpenCV實現一個將3D模型顯示在現實中的小例子,學習基於Marker的AR技術,既簡單又有趣。

5. C++ 基於 OpenCV 實現實時監控和運動檢測記錄
使用 C++ 和 OpenCV 提供的庫函式,實現攝像頭的實時監控功能,並通過監控畫面的運動檢測選擇是否記錄視訊。監控人員可選擇輸出影象的模式以更容易的分辨監控中的異常情況。
使用OpenCV&&C++進行模板匹配,在一張大圖中去查詢並圈出目標小圖。你將學習到關於OpenCV的一些函式用法和模板匹配的完整流程。

image
利用OpenCV中的平滑處理和線性濾波器對圖片進行處理,打造模糊效果。將介紹歸一化濾波器,高斯濾波器,中值濾波器,雙邊濾波器這四種濾波器的相關知識,並且會對“核”和卷積進行相應的講解。
8. C++ 實現即時通訊軟體
使用C++實現一個具備服務端和客戶端的即時通訊聊天室,涉及網路程式設計,C++面向物件程式設計等知識。

9. C++實現課程管理系統
使用 C++ 實現一個課程管理系統,在這個過程中會介紹C++11的很多特性,同時可以熟悉Linux下的C++語言編譯方法及簡單的Makefile編寫。
////中場休息,笑一笑吧

進階專案
如果你還在使用傳統 C++,打著 C++ 的名號寫出 C 語言程式碼,請停下來。本教程將帶領你快速上手 C++11/14 的重要特性。
學習 C++ 利用 ffmpeg 解碼視訊資料,將解碼後的視訊資料播放出來。學習 ffmpeg 和 SDL 基本的用法。

使用 C++ 及大量 C++11新特性設計並實現一個執行緒池庫。
獲得記憶體池所分配的記憶體速度高於從堆中獲得分配的記憶體的速度,一個長期穩定執行的服務在追求極致的過程中,實現記憶體池是必不可少的。和標準庫中的預設分配器一樣,記憶體池本質上也是分配器

綜合使用 C++11 及 Boost 中的 Asio 實現 HTTP 和 HTTPS 的伺服器框架。
使用 C++ 實現 Markdown 解析器,並將解析的內容生成為 HTML。

image
7. C++ 使用 Crypto++ 庫實現常用的加密演算法
利用 Cryto++庫 對字串進行 AES 加密和解密,RSA 加密和解密,生成 MD5 值。其中主要用到了 Crypto++ 庫,這是開源的C++資料加密演算法庫,支援如下演算法:RSA、MD5、DES、AES、SHA-256等等。
介紹 json 和一些常見的 json 庫,並用 C++ 編寫一個 json 生成器,生成 json 資料,並學習編寫測試用例。

image
Radix樹 , 這是一種基於二進位制表示的鍵值的查詢樹,尤其適合處理非常長的、可變長度的鍵值,Patricia 的基本思想是構建一個二叉樹。
10. C++ 實現智慧指標
使用C++語言實現智慧指標的過程,來了解C++基本程式設計的方法,包括類的定義與使用,運算子的過載,模板類的使用方法,以及引用計數技術。

高階專案
操作 redis 實現非同步訂閱和釋出,其中將介紹 redis 基礎知識,在linux中安裝和使用 redis ,常用的 hiredis API,並實現一個例程。
Docker 的本質是使用 LXC 實現類似虛擬機器的功能,進而節省的硬體資源提供給使用者更多的計算資源。本專案將 C++ 與 Linux 的 Namespace 及 Control Group 技術相結合,實現一個簡易 Docker 容器。

記憶體洩漏一直是 C++ 中比較令人頭大的問題, 即便是很有經驗的 C++程式設計師有時候也難免因為疏忽而寫出導致記憶體洩漏的程式碼。除了基本的申請過的記憶體未釋放外,還存在諸如異常分支導致的記憶體洩漏等等。本專案將使用 C++ 實現一個記憶體洩漏檢查器。
RTTI 是執行時型別識別的英文縮寫,C++ 本身提供了執行時型別檢查的運算子 dynamic_cast 和 typeid,然而 dynamic_cast 的效率其實並不理想,需要犧牲一定效能。本專案將手動實現一個高效能 RTTI 庫。

image
有句話是這樣說的:一件事,1000人想去做,100人開始做了,最終,只有1個人堅持到了最後。 話雖沒有絕對,但想想看,今天確實是你生命中最年輕的一天啦 ,所以,想要做的事,勇敢撿起來做吧!祝你學習順利。