原创 《TCP/IP網絡編程》第9章 筆記&代碼&註釋

Windows 套接字可選項和I/O緩衝大小 實際中我們需要根據特性對套接字進行更改(例如 廣播特性),之前我們的程序都是通過默認的套接字特性進行數據通信。 //Windows #include<winsock2.h> int gets

原创 《TCP/IP網絡編程》第2章 筆記&代碼&註釋

注:本章內容大部分爲第一章的服務器與客戶端代碼的解析與理解,十分重要 協議 服務器端和客戶端爲了能進行數據交換,他們必須遵循同一個協議:    創建套接字 int socket(int domain, int type, int pro

原创 《TCP/IP網絡編程》第6章 筆記&代碼&註釋

基於UDP的回聲迭代客戶端&服務端代碼: 在Linux和Windows裏,recvfrom()和sendto()函數並無太大區別。 對比recvfrom() 和 recv(),recvfrom()多了兩個參數用來接收對端的地址信息,這對於

原创 《TCP/IP網絡編程》第7章 筆記&代碼&註釋

Linux的close()函數與Windows的closesocket()意味着完全斷開連接,這令他無法再收&發數據。 爲了更加優雅的斷開連接:只斷收發其中的一個功能,close()和closesockI()就顯得不太夠用。 shutdo

原创 《TCP/IP網絡編程》第5章 筆記&代碼&註釋

在第四章中的回聲迭代客戶端中,客戶端通過write()一次性將字符串發送過去,之後調用read()等待接受自己傳輸的字符串,因此這個回聲迭代客戶端是不完美的。 解決方法就是提前確定接受數據的大小: //Linux while(1) {

原创 C++ BST-Binary Search Tree 二叉搜索樹的實現

BST 二叉搜索樹(binary search tree) 二叉搜索樹只能爲空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的

原创 C++ GeneralizedTable 廣義表的實現

結點 ////Generalized_node.h #include<iostream> #include<assert.h> enum Nodetype{ HEAD, VALUE, SUB, }; struct General

原创 C++ RBTree 紅黑樹的實現

紅黑樹的性質 每個結點不是紅色就是黑色 根節點是黑色的 如果一個根節點是紅色的,則它的兩個葉子結點是黑色的(沒有兩個連續的紅色結點) 對於每個結點,從該結點到其所有後代葉結點的簡單路徑上,均包含相同數目的黑色結點(每條路徑上黑色結點

原创 C++利用RAII技術讓系統爲我們管理資源(資源獲取即初始化——Resource Acquisition Is Initialization)

RAII技術(資源獲取即初始化——Resource Acquisition Is Initialization) 編寫程序我們經常會使用new或者mallco來向系統申請內存,但我們也會可能忘記使用delete去釋放他們,而這種不釋放

原创 C++STL中的hash_map 哈希表

map與hash_map map與hash_map都是在C++STL中常用的數據結構。 map:存儲數據結構是採用紅黑樹實現,提供了key-value的存儲和查找功能,查找速度可達log(n)。 hash_map:基於hash_tab

原创 C++智能指針:shared_ptr,uniqe_ptr,weak_ptr

動態內存 在C++中,動態內存的管理是通過一對運算符來完成的:new和delete。 new:在動態內存中爲對象分配空間,並返回一個指向該對象的指針 delete:接受一個動態對象的指針,銷燬該對象,並釋放與之關聯的內存 動態內存的使

原创 C++11 Lambda表達式

Lambda表達式 匿名函數有函數體,但沒有函數名。 匿名函數是很多高級語言都支持的概念,如lisp語言在1958年首先採用匿名函數。正因爲如此,C++11也同樣引入了lambda函數。 在C++11中,你可以在源碼中內聯一個lamb

原创 《深入瞭解計算機系統》筆記——優化程序性能

程序性能優化 編寫高性能程序需要滿足: 1.選擇適當的算法和數據結構 2.必須編寫出變異其能夠有效優化以轉化成高效可執行代碼的源代碼 程序優化 程序優化的第一步就是消除不必要的工作:例如對同一個內存地址的反覆讀寫我們要儘可能的減少,消

原创 《深入瞭解計算機系統》筆記——彙編語言和機器語言

彙編語言和機器語言 我們不需要完全瞭解掌握機器語言、彙編語言來進行編程(這是計算機生產廠家要做的事)。我們所要知道的是如何看懂彙編語言就行了。我們所編寫的高級語言,被翻譯成彙編語言時,編譯器會自動進行一些優化處理。 機器語言 計算機是

原创 C++中const的“就近原則”

在做題的時候,編譯時經常會遇到關於const的坑,如果在平時不是常用的話就會很容易忘記,在這裏整理一下const的“就近原則”的筆記。 指針 要理解就近原則首先要明白指針。 指針(pointer),可以看作指向(point to)。與