C C 語法 (六)常用庫函式與位運算

2022-02-01 10:19:01 字數 2265 閱讀 1264

當代計算機畢竟服務於二進位制,有這麼個運算方式也就不奇怪了,與、或、非(取反)就不談了,胎教的時候已經學過了,著重看一下異或:

異或可以理解為無進製加法,如:

\[0\oplus0 = 0

\]\[1\oplus1=0

\]\[0\oplus1=0

\]除此之外還有左移、右移,計算機組成原理裡已經學得很多了,無需多言。

//若想取出乙個數的二進位制數的第k位

int a = 13;

cout << (a >> 2 & 1) << endl;

//取出若干位

for (int i = 0; i <5; i ++)

cout << (a >> i & 1) << endl;

//lowerbit 返回最後乙個1以及之後的數

//如x=1001000 lowerbit(x) = 1000

//從低層實現上看 lowerbit(x) = x & (-x);

int a = 23333;

int b = -a;

int c = ~a + 1;

//根據補碼知識,b和c是完全相等的

以下介紹的函式基本都在algorithm庫中:

(1)reverse

#include #include using namespace std;

int main());

reverse(a.begin(), a.end()); //翻轉vector

int a = ;

reverse(a, a + 5); //翻轉陣列 注意最後要寫a.size()

}

(2)unique函式

//前提條件:unique只適用於排好序的陣列或其他 

//unique返回的是去重之後的尾迭代器(指標)、

//例如經過unique後 a = ;

//unique返回的迭代器指向第乙個x

int a = ;

int m = unique(a, a + 7) - a; //常用技巧 得到不重複元素的個數 m的值為4

vectora();

int m = unique(a.begin(), a.end()) - a.end(); //m = 4

a.erase(unique(a.begin(), a.end()), a.end()); //得到不重複的vector 得到 1,2,3,4

(3)random_shuffle函式:用來打亂順序 用得不多 主要用來生成資料

#include int main()});

srand(time(0);

random_shuffle(a.begin(), a.end()); //每次執行 vector的值都不一樣

}

(4)sort函式

sort(a.begin(), a.end()); //預設從小到大排序

sort(a.begin(), a.end(), greater()); //從大到小排序

//自定義函式排序

bool cmp(int a, int b) //a在什麼情況下應該排在b的前面

sort(a.begin(), a.end(), cmp);

//結構體排序

struct reca[5];

bool cmp(rec a, rec b)

sort(a, a + 5, cmp);

如果不想定義乙個比較函式,可以使用過載的方法來使結構體具有比較的能力:

struct rec

}a[5];

sort(a, a + 5);

(6)lower_bound與upper_bound

之前在stl裡面講過了,lower_bound是大於等於x,upper_bound是大於x,實際上它不僅僅服務於stl中的容器:

int a = ;

int *p = lower_bound(a, a + 5, 4); //返回指向》=4元素的迭代器

//如果第三個值不在陣列裡 則會返回隨機值

int t = lower_bound(a, a + 5, 5) - a; //返回下標 這裡是4

int t = lower_bound(a, a + 5, 3) - a; //返回3

本文演算法思想源於acwing,特此註明。

1 9位運算與常用庫函式

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.常用庫函式 inc...

C C 常用的庫函式

include using namespace std 函式名稱 返回值 isalnum 如果引數是字母數字,即字母或者數字,函式返回true isalpha 如果引數是字母,函式返回true iscntrl 如果引數是控制字元,函式返回true isdigit 如果引數是數字 0 9 函式返回tr...

技巧 C C 常用庫函式

一 map相關 1 map定義時新增引數 less greater 可以設定map內排序為公升降序 2 map.find val 返回迭代器,失敗是迭代器指標指向map.end 3 map.erase it map.erase it1,it2 map.erase key 二 algorithm庫 1...