C++排序库函数的调用(sort函数)
参考 http://www.cnblogs.com/jjzzx/p/5122381.html http://blog.csdn.net/zzzmmmkkk/article/details/4266888/
sort(a,a+10); 从小到大排序 头文件为#include<algorithm>
从大到小排序
bool
complare(
int
a,
int
b)
{
return
a>b;
}
sort(a,a+10,complare);
c++随机生成0和1
int num=rand()%2;
初始化全是0的数组
int a[0]={0};
回车符对getline()的影响
#include iostream>//<>
#include
using namespace std;
int main()
{
char ch;
string s;
cin>>ch;
getline(cin,s);
cout<<ch<<"----------";
cout<<s<<"++++++";
return 0;
}
当输入一个字符‘a’和回车时,输入缓冲区内存了一个字符和一个回车,ch把字符读取了,而getline正好遇到输入缓冲区内的回车,s为空,而结束了输入。getline 并不忽略行开头的换行符。只要 getline 遇到换行符,即便它是输入的第一个字符,getline 也将停止读入并返回。
在cin>>ch;后面加入 cin.sync();可以清空缓冲区,从而不影响下次输入。
也可以在cin>>ch;后面加入 getchar();把缓冲区的回车符读取出来。
cin.clear()只是将cin的状态位设置为有效。比如while(cin>>x)这个退出循环时,
我们是按ctrl+z文件结束符来结束输入,这时候cin的eofbit位被设置成1,
那cin就处于无法输入状态,clear把所有的状态位设置为有效,才可以继续输入,但不清输入缓冲区。
或者在getline前面加上cin.ignore();
大小写转换
参考 http://blog.csdn.net/jiejinquanil/article/details/51166883
transform(src.begin(), src.end(), back_inserter(dst), ::toupper);//转大写;头文件<cctype>,<algorithm> ?
transform(src.begin(), src.end(), dst.begin(), ::tolower);//转小写
toupper(c);//转大写
int和char的转换
char a='7'; int b=a-'0'; //b=7;
同理,加‘0’可转化为字符。
位运算
参考 http://blog.csdn.net/senyelicone/article/details/52196039
&与,|或,^异或(不同为1); >>1右移相当于整数除以2,1<<左移1相当于乘以2;
n&(n-1) 清除最右边的1;(循环得到二进制中1的个数)
1. c = (a-b)>>31
(1)当a>=b时,(a-b)符号位为0,(a-b)右移31位,高位补0,右移后的结果为0;
(2)当a<b时,(a-b)符号位为1,(a-b)右移31位,高位补1,故右移后的结果不是 我们想当然的1,而是-1。
* 题目意思是数中奇偶位位数相等,而位上对应数字互换,交换一个二进制数的奇偶数位。
* (x&0xaaaaaaaa)>>>1就是把奇数位清0,偶数位移到奇数位
* (x&0x55555555)<<1就是把偶数位清0,奇数位移到偶数位
int
even = ((x&0xAAAAAAAA)>>1)&0x7fffffff; 有符号
public
int
getMax(
int
a ,
int
b){
b = a-b;
//此时b>>31为1则b小于0即a<b,若b>>31为0 则a>b
a- = b&(b>>
31
);
//若a<b a=a-(a-b),若a>b a=a-0
return
a;
}
栈
#include <stack>
empty() 堆栈为空则返回真
pop() 移除栈顶元素
push() 在栈顶增加元素
size() 返回栈中元素数目
top() 返回栈顶元素