CSP语法基础题(六)

CSP语法基础(六)-常用库函数

  1. 位运算
a = 110110(二进制下);	// 想要取这个二进制数的第k位数字是0还是1,方法先将第k位数字移到最后一位就是个位,然后&上1,是0就是0,是1就是1;
// 取出二进制数的第k位,观察是0还是1
cout << (a>>k)&1;

x = 1010;
lowbit(x);	//lowbit会返回最后一位1以及之后的所有0	此例返回的就是10
x1 = 1011000;
lowbit(x1);	//lowbit返回的就是1000				PS:计算机里面负数的实现是取反再加上1
																				// 正数 a就是a
																				// 负数 -a就是 ~a+1
#include <iostream>

using namespace std;

int main(){

    int a = 131432;
    int b = -a;
    int c = ~a+1;

    cout << b << " == " << c <<  endl;			//可以看到确实是相等的
    return 0;	
}

![截屏2021-03-09 17.30.08](/Users/liufeng/Desktop/截屏2021-03-09 17.30.08.png)

————————————————————————————————————————————

#include <algorithm>
#include <iostream>
#include <vector>
#include <ctime>
//算法库

using namespace std;

int main(){
  //reverse函数
  int a[] ={1,2,3,4,5};
  vector<int> b({1,2,3,4,5});
  reverse(b.begin(),b.end());//既可以翻转数组也可以翻转vector
  for(int c:b)	cout << c << endl;
  //翻转数组
  reverse(a,a+5)//类似于begin\和end
    for(int cc:a) cout << cc << " ";
  
  
  //unique函数 去重函数,并且把不相同函数都放在数组的最开头,并返回去重后数组的下一个元素,像end尾迭代器    和reverse函数一样第一个参数是begin,第二个参数是end
  int m = unique(b.begin(),b.end())-b.begin();	//返回的就是去重后元素的数量
  
  
  /* vector的写法
  vector<int> a({1,1,2,3,4,5,5,8});
  int m = unique(a.begin(),a.end()) - a.begin();
  
  */
  
 	//random_shuffle函数 自己生成的数组打乱数据,帮助生成随机数据
  srand(time(0));		//返回当前时间到1970/7/1的一个秒数,此举就是改变了随机种子
  vector<int> b({1,2,3,4,5});	//原本是有序的
  rondom_shuffle(b.begin(),b.end());	//这样一来顺序就随机打乱了   不过这个随机是伪随机
  //要想使用正真的随机,必须改变随机种子,一般是把时间传进去作为随机种子,添加头文件time
  
  //sort函数 参数也是和reverse函数一样,但是一般默认的是从小到大排序
  //要想从大到小排序,还得添加第三个参数greater<int>
  sort(a.begin(),a.end(),greater<int>);	//按照从大到小的顺序
 
  return 0;
}
#include<iostream>
#include<algorithm>

using namespace std;

//使用sort函数对结构体进行排序
struct Rec{
  int x,y;
};
bool cmp(Rec a,Rec b){
  return a.x > b.x;	//根据x进行比较
}
int main(){
  
  Rec a[10];
  for(int i=0;i<10;i++){		//赋值操作
    a[i].x = -i;
    a[i].y = i;
  }
  
 	for(int i=0;i<10;i++){
    cout << a[i].x << " " <<a[i].y;
  }
  //高能!!!
  sort(a,a+10,cmp);		//cmp的返回值是bool值
  return 0;
}

Lower_bound()函数和upper_bound()函数

#include<iostream>
#include<algorithm>

using namespace std;
int main(){
int a[] ={1,2,3,4};

lower_bound(a,a+4,3);		//和unique一样返回的是迭代器尾 功能是返回大于等于值是3的数中的第一个迭代器
//
int* p = lower_bound(a,a+4,3);
cout << *p << endl;
int* q = upper_bound(a,a+4,3);      //返回严格大于3的第一个元素的位置
cout << *q << endl;                 //名字容易误导啊

return 0;
}
posted @ 2021-03-10 23:01  _Sandman  阅读(88)  评论(0编辑  收藏  举报