演算法學習中遇到的函式 並不全

2021-08-13 15:50:21 字數 3266 閱讀 2689

本文包括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次比較,最多...