有一些程序,雖然寫起來不難,但是可能比較麻煩或容易出錯,這時就可以用c++函數庫里自帶的一些實用的函數。
這里只記錄一些不太常見的函數。
-------------------------------------!持續更新!-----------------------------------------------------
--------------------------------------正文分界線-------------------------------------------------------
1. __gcd(x, y)
求兩個數的最大公約數,如__gcd(6, 8) 就返回2。在 algorithm 庫中。是不是很方便?
2. reverse(a + 1, a + n + 1)
將數組中的元素反轉。a 是數組名,n是長度,跟 sort 的用法一樣。值得一提的是,對於字符型數組也同樣適用。也在 algorithm 庫中。
3. unique(a + 1, a + n + 1)
去重函數。跟sort的用法一樣。不過他返回的值是最后一個數的地址,所以要得到新的數組長度應該這么寫: _n = unique(a + 1, a + n + 1) - a - 1.
4.lower_bound(a + 1, a + n + 1, x); upper_bound(a + 1, a + n + 1, x)
lower_bound是查找數組中第一個大於等於x的數,返回該地址,同理也是 pos = lower_bound(a + 1, a + n + 1, x) - a
upper_bound是查找第一個大於x的數,用法和lower_bound一樣
復雜度是二分的復雜度,O(logn)。(其實就是代替了手寫二分)
5.printf("%.3f M\n",(double)sizeof(a)/(1<<20));
這個其實不算函數,但是能輸出數組占用了多少內存,不用手算了~(a是數組名)。
6.fill(a + 1, a + n + 1, x)
將數組a中的每一個元素都賦成x,跟memset的區別是,memset是一個字節一個字節賦值,fill是一個元素一個元素賦值!(省掉一層for……)