本文包括pekinguniversity的演算法基礎以及演算法競賽入門經典第二版的紫書
#include
模板函式
sort排序函式 uva10474
sort函式有三個引數:sort(a,a+n,complare);
(1)第乙個是要排序的陣列的起始位址。
(2)第二個是結束的位址(最後一位要排序的位址)
(3)第三個引數是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個引數,此時預設的排序方法是從小到大排序。
附
bool complare(int a,int b)
unique函式
vector是乙個模板類,需要用類似於vector a 或者vector b這種說法來定義.
vector是一種類似於int a的整數陣列
vector是一種類似於string a的字串陣列
此外,vector可以作為函式的引數或者返回值,而無需像傳遞陣列那樣另外用乙個變數指定元素的個數.
部分操作:
若a是乙個vector
a.size();讀取大小;
a.resize();改變大小
a.push_back();向尾部新增元素
a.pop_back();刪除最後乙個元素
a.clear();清空
a.empty();測試是否為空
vector之間也可以直接賦值或者作為函式的返回值.
#include集合 uva10815
set就是數學上的集合即每個元素最多出現一次,和sort一樣,自定義型別也可以構造set,但同樣必須定義」小於」運算子. set的特性是,所有元素都會根據元素的鍵值自動排序,set的元素不像map那樣可以同時擁有實值(value)和鍵值(key),set元素的鍵值就是實值,實值就是鍵值。set不允許兩個元素有相同的鍵值。
set的各成員函式名稱及用法
1. begin()--返回指向第乙個元素的迭代器
2. clear()--清除所有元素
3. count()--返回某個值元素的個數
4. empty()--如果集合為空,返回true
5. end()--返回指向最後乙個元素的迭代器
6. equal_range()--返回集合中與給定值相等的上下限的兩個迭代器
7. erase()--刪除集合中的元素
8. find()--返回乙個指向被查詢到元素的迭代器
9. get_allocator()--返回集合的分配器
10. insert()--在集合中插入元素
11. lower_bound()--返回指向大於(或等於)某值的第乙個元素的迭代器
12. key_comp()--返回乙個用於元素間值比較的函式
13. max_size()--返回集合能容納的元素的最大限值
14. rbegin()--返回指向集合中最後乙個元素的反向迭代器
15. rend()--返回指向集合中第乙個元素的反向迭代器
16. size()--集合中元素的數目
17. swap()--交換兩個集合變數
18. upper_bound()--返回大於某個值元素的迭代器
19. value_comp()--返回乙個用於比較元素間的值的函式
#include
sprintf函式原型為 int sprintf(char *str, const char *format, …)。作用是格式化字串,具體功能如下所示:
(1)將數字變數轉換為字串。
sprintf(str,」%d」,data);
(2)得到整型變數的16進製制和8進製字串。
sprintf(str,」&x%x」,data);
sprintf(str,」0%o」,data);
(3)連線多個字串。
sprintf(str,」%s %s」,s1,s2);
#include
stringstream函式
stringstream主要是用在將乙個字串分割,可以先用 clear( )以及 str( ) 將指定字串設定成一開始的內容,再用 >> 把個別的資料輸出,例如:
string s;
stringstream ss;
int a, b, c;
getline(cin, s);
ss.clear();
ss.str(s);
ss >> a >> b >> c;
stringstream通常是用來做資料轉換的。
相比c庫的轉換,它更加安全,自動和直接。
例子一:基本資料型別轉換例子 int轉string
#include
#include
#include
int main()
例子二:除了基本型別的轉換,也支援char *的轉換。
#include
#include
int main()
例子三:再進行多次轉換的時候,必須呼叫stringstream的成員函式clear().
#include
#include
int main()
//以上例子來自於
注意:重複利用stringstream物件
如果你打算在多次轉換中使用同乙個stringstream物件,記住再每次轉換前要使用clear()方法;
在多次轉換中重複使用同乙個stringstream(而不是每次都建立乙個新的物件)物件最大的好處在於效率。stringstream物件的構造和析構函式通常是非常耗費cpu時間的。
常見格式串
%% 印出百分比符號,不轉換。
%c 整數轉成對應的 ascii 字元。
%d 整數轉成十進位。
%f 倍精確度數字轉成浮點數。
%o 整數轉成八進位。
%s 整數轉成字串。
%x 整數轉成小寫十六進製。
%x 整數轉成大寫十六進製。
%n sscanf(str, "%d%n", &dig, &n),%n表示一共轉換了多少位的字元
補充:
nth_element()
o(n)的複雜度求出第k大的數字
使用方法:
nth_element(first,nth,last)
first,last 第乙個和最後乙個迭代器,也可以直接用陣列的位置。
nth,要定位的第nn 個元素,能對它進行隨機訪問.
演算法學習 母函式
母函式又稱生成函式。定義是給出序列 a0,a1,a2,ak,那麼函式g x a0 a1 x a2 x2 ak xk稱為序列a0,a1,a2,ak,的母函式 即生成函式 特別的當序列為 1,1,1,1,1,這個生成函式為 g x x x2 x3 xn 1 xn 1 x 當 11 1 x n 1 c n...
floyd warshall演算法 學習中
今天做題時接觸到了這個演算法 單獨一條邊的路徑也不一定是最佳路徑。從任意一條單邊路徑開始。所有兩點之間的距離是邊的權的和,如果兩點之間沒有邊相連,則為無窮大 對於每一對頂點 u 和 v,看看是否存在乙個頂點 w 使得從 u 到 w 再到 v 比己知的路徑更短。如果是更新它。不可思議的是,只要按排適當...
Java中的排序演算法學習
二 選擇排序 三 插入排序 四 快速排序 五 比較 接下來利用這些排序演算法對乙個陣列進行公升序,即由小到大的排序。比較相鄰的元素,如果前面的元素比後面的大,則交換這兩個元素 定位到下一對相鄰元素,重複第一條規則 重複1,2,經過n 1輪完成排序,每輪進行n 1次比較,總計n n 1 2次比較,最多...