當代計算機畢竟服務於二進位制,有這麼個運算方式也就不奇怪了,與、或、非(取反)就不談了,胎教的時候已經學過了,著重看一下異或:
異或可以理解為無進製加法,如:
\[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...