原创 類模板、綁定器與參數推演

當我們執行一段代碼時,如果有一個循環調用一個函數,那就有不斷的函數棧貞的開闢與回退,就造成效率底下,在c++中我們可以用模板解決這個問題,模板在編譯階段就被確定。 template<typename T>//二元比較器 class

原创 拷貝構造函數與賦值運算符的重載函數

#define _CRT_SECURE_NO_WARNINGS //#include<stdio.h> //#include<stdlib.h> #include<string.h> using namespace std; #i

原创 二叉樹的一些基本操作

二叉樹的創建 二叉樹創建的方式有很多種,可以根據先根遍歷的序列和中根遍歷的序列對二叉樹進行創建,也可以給一個特定的先序序列對二叉樹進行創建。用先根序列和中根序列創建二叉樹,就是先根序列的第一個元素一定是樹的根節點,然後再中根序列中

原创 全局變量與局部變量

#include<stdio.h> int i = 10;//1.定義的全局變量,生命週期從此處定義時開始到此程序結束,作用域爲文件作用域, int j;//2.全局變量均存放在數據段這個存儲區域,未初始化時編譯器自動賦值爲0

原创 linux內核實現的通用鏈表思想

在linux內核中實現通用鏈表的思想: 1.定義兩個結構體,一個結構體(這裏我稱其爲內層結構體)是隻有指針成員,用於負責結構體的連接,前驅與後繼等,另一個結構體(這裏叫做外層機構體)相當於是留給用戶自己定義的 ,自己想要什麼存放

原创 將一個字符串中的空格字符替換成另外一個字符串

將一個字符串中的一個空格替換成另外一個字符串,首先需要解決字符串長“%20”就需要每遇到一個空格字符就得增加兩個長度,接下來就是遍歷字符串,並且遇到空格就替換,可想而知,從前往後遍歷比較麻煩繁瑣,所以這裏我選擇從後往前遍歷,具體代

原创 程序的調用機制及目標文件有什麼

1、一個程序的成功執行,需要經過層層的調用才能讓計算機相應的硬件執行相應的功能,讓cpu執行計算,讓內存存儲信息等等,軟件是依賴與硬件,硬件沒有了軟件的控制也就沒有了靈魂,那麼一個應用程序的運行底層到底是怎樣調用的呢?它劃分了一層

原创 C++對象生命週期

class Test { public: Test(int a = 5, int b = 5) // Test(); Test(10); Test(10, 10); { ma = a;

原创 結構體數組與指針

struct Student //定義的結構體類型 相當於int 、float這些類型 ,是用戶自定義的 { char name[20]; int num; float score; }s[5] = {

原创 類模板以及賦值運算符重載、拷貝構造函數

編譯器默認的拷貝構造函數,是發生的淺拷貝,像指針的賦值就會讓指針指向同一個地址空間,析構時就會對同一個地址空間釋放兩次,就會造成程序崩潰. 自定義在模板內的拷貝構造函數: Queue(const Queue<T> &src)//

原创 進程的調用和進程切換

進程調用的時機 自願調度:用戶進程自願發生調度,如用戶進程調用wait4()和exit()時,內核進程 調用schedule()函數發生調度(schedule()只有內核線程才能調用)。 非自願調度:當發生中斷或者系統調用時,從系統空間返

原创 三種繼承方式的區別與聯繫

#include<iostream> using namespace std; class Base { public: void fun_1(){} protected: void fun_2(){} private

原创 select源碼剖析

asmlinkage long sys_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, struct timeval __user *t

原创 虛函數與虛函數表剖析(動多態)

探索C++虛函數在g++中的實現 本文是我在追查一個詭異core問題的過程中收穫的一點心得,把公司項目相關的背景和特定條件去掉後,僅取其中通用的C++虛函數實現部分知識記錄於此。 在開始之前,原諒我先借用一張圖黑一下C++: “無敵”的

原创 【詳解】平面中最接近點對問題

數組當中的最接近點對問題詳解 在一個一維數組當中要找出兩個值相減得到的差值最小,當然有的人會說這個很簡單,只要將數組當中的值兩兩相減,然後對最後的結果找一個最小值就可以了,這種方法想必是可以,這就是所謂的暴力解法,時間複雜度是非常大的。