原创 使用stringstream簡化類型轉換
<sstream>庫定義了三種類:istringstream、ostringstream和stringstream,分別用來進行流的輸入、輸出和輸入輸出操作。另外,每個類都有一個對應的寬字符集版本。 注意,<sstream>使用strin
原创 求1 2 3 ... n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)
方法一:遞歸,O(n)的複雜度(利用運算符短路模擬if) int Sum_Solution(int n) { int a = 1; n > 1 && (a = n + Sum_Solution(n - 1)); return a;
原创 替換空格(將字符串中的空格替換爲20%)
請實現一個函數,將一個字符串中的空格替換成“%20”。例如,當字符串爲 We Are Happy.則經過替換之後的字符串爲 We%20Are%20Happy。 解題思路:先遍歷找出空格總數,並計算出替換之後的字符串的總長度。然後從字符串的
原创 ++運算符重載
運算符的重載: 運算符與類結合,產生新的含義。 運算符重載的作用:爲了實現類的多態性(多態是指一個函數名有多種含義) 實現運算符的重載的方式:類的成員函數 或 友元函數(類外的普通函數) ++和--運算符的重載: 1、遞增和遞減一般是改
原创 插入排序
插入排序是一種最簡單直觀的排序算法,它的工作原理是通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。 算法步驟 將第一待排序序列第一個元素看做一個有序序列,把第二個元素到最後一個元素當成是未排序序
原创 動態內存分配
一、內存區域 1、堆、棧(const變量在棧裏)、全局區、常量區、代碼區 常量區,代碼區是隻讀段,不能改 棧:系統自動分配的空間,只要不特殊聲明,就定義在棧區,函數的區域也在棧上。棧是向下增長的。 堆:使用動態內存分配的方式可以申請堆空間
原创 友元、內部類
1、友元 友元就是讓一個外部函數或者外部類能訪問我的私有成員。 友元打破了原有的權限制度,所以十分危險,不建議使用。 2、內部類 在另一個類內聲明的類 它屬於外部類域中的一員,實例化對象需要使用域操作運算符(::),同時它有權限的限制。
原创 練習函數重載
有以下結構: struct student{ char name[32]; int age; int class; bool sex; }; 寫出函數,用函數重載的方式編寫程序,統計出一個以上述結構爲基準的結構體數組中:
原创 類和對象2
一,構造函數 1,構造函數是一個特殊的成員函數,不存在返回值,名字和類名相同,在實例化對象的時候自動調用。傳什麼參數調什麼構造 2,系統會自動提供一個默認的構造函數,如果自己實現了構造函數,則系統不再提供默認的構造函數。 帶參數的構造函數
原创 類和對象3
類和對象3 一、初始化列表 1、狹義初始化 在定義變量的時候直接進行初始化,int i=3; 2,廣義初始化 第一次給變量賦值就叫做初始化的情況叫廣義初始化 int a; ...//跟a無關的代碼 a=3 初始化列表相
原创 類和對象
一,類和對象 結構體在C和C++的不同 1,在C++中,用結構體定義變量不需要加struct,而c中不行 2,在C++中,可以定義空結構體,大小爲1,而c不行 3,在C++中,可以在結構體中聲明甚至實現函數,而c中只能放函數指針 4,在C
原创 名字空間(namespace),函數重載
一、名字空間(namespace) 1、名字空間可以解決函數、全局變量名重複的問題,包在不同的名字空間裏的重複函數實際就是兩個完全無關的函數。 2、名字空間允許嵌套,嵌套內部和外部沒有任何關係。 3、名字空間允許重名,重名的名字空間會被合
原创 希爾排序
希爾排序是對直接插入排序的優化,數組越有序,插入排序更快 void ShellSort(int * src, int n) { int i, j, k; int gap, tmp; for (gap = n / 2; gap;
原创 快速排序(雙指針法,刨坑法,hoare法)
分割策略: #include <stdio.h> #include <stdlib.h> void InsertSort(int * src, int n) { int i, j; int tmp; for (i = 1; i
原创 直接插入排序
核心思想:1,拷貝 2,平移,3,插入 void InsertSort(int * src, int n) { int i, j; int tmp; for (i = 1; i < n; i++) { tmp = src