1.位運算
& 與 and
| 或 or
~ 非 not
^ 異或 xor
>> 右移
<< 左移
求x的第k位數字 x >> k & 1 , 從後往前數,最末一位是0
lowbit(x) = x & -x,-x是(~x+1) ; 返回x的最後一位1 , 即110110,則返回10 ; 101000,則返回1000.返回最後乙個1加上後面的一串0.
2.常用庫函式 #include
1)reverse() ; 不僅可以翻轉vector , 還可以翻轉陣列
將a陣列和b vector翻轉輸出
2)unique函式 , 去重
返回去重之後的尾迭代器(或指標),仍然為前閉後開,即這個迭代器是去重之後末尾元素的下乙個位置。該函式常用於離散化,利用迭代器(或指標)的減法,可計算出去重後的元素個數。
把乙個vector去重:
int m = unique(a.begin(), a.end()) – a.begin();
把乙個陣列去重,元素存放在下標1~n:
3)random_shuffle 隨機打亂 , 用法與reverse相同
random_shuffle(a,a+10);//4)sort函式,用來排序陣列random_shuffle(b.begin() , b.end());//
vector
sort(a,a+10);//自定義struct結構體排序:陣列,從小到大
sort(b.begin() , b.end() , greater());//
vector,從大到小
5)lower_bound/upper_bound 二分
lower_bound 的第三個引數傳入乙個元素x,在兩個迭代器(指標)指定的部分上執行二分查詢,返回指向第乙個大於等於x的元素的位置的迭代器(指標)。
upper_bound 的用法和lower_bound大致相同,唯一的區別是查詢第乙個大於x的元素。當然,兩個迭代器(指標)指定的部分應該是提前排好序的。
在有序int陣列(元素存放在下標1~n)中查詢大於等於x的最小整數的下標:
int i = lower_bound(a + 1, a + 1 + n,. x) – a;
在有序vector中查詢小於等於x的最大整數(假設一定存在):
C C 語法 (六)常用庫函式與位運算
當代計算機畢竟服務於二進位制,有這麼個運算方式也就不奇怪了,與 或 非 取反 就不談了,胎教的時候已經學過了,著重看一下異或 異或可以理解為無進製加法,如 0 oplus0 0 1 oplus1 0 0 oplus1 0 除此之外還有左移 右移,計算機組成原理裡已經學得很多了,無需多言。若想取出乙個...
64位 atol c linux C 庫函式
c 庫函式 atol 描述c 庫函式 long int atol const char str 把引數 str 所指向的字串轉換為乙個長整數 型別為 long int 型 宣告下面是 atol 函式的宣告。long int atol const char str 引數str 要轉換為長整數的字串。返...
常用位運算
檢測乙個無符號數是不為2 n 1 為冪 x x 1 將最右側0位改為1位 x x 1 二進位制補碼運算公式 x x 1 x 1 x x 1 x x 1 x x 1 x y x y 1 x y x y x y x y 1 x y x y x y x y x y x y x y y x y x y x ...