|
1. 深度分析数据的类型
数的表示 二进制 原码反码补码 所占空间和范围
char, short int, int ,long long
unsinged
位操作 cout<<(3^2); (以后专门讲)
bitset
结构体
指针 p=* int
字符串与字符数组
Play safety
int l;
string s="SJF NIU";
l=s.size();
cout<<(l>-3)<<endl;
cout<<(s.size()>-3)<<endl;
2. 输入输出的技术
初学c++一般建议用cin和cout进行输入输出,不用考虑太多的格式,基本够用,比如输入一个整数 int x;cin>>x;
输出一个字符串 cout<<s;
输出实数保留两位小数 cout<<fixed<<setpricision(2)<<x;(注意iomanip库)
输出一个整数占4个格子 cout<<setw(4)<<x; (注意iomanip库)
输出一个整数占4个格子,不足4位前面补0 cout<<setw(4)<<setfill(“0’)<<x;
输出数字对应的字符 cout<<char(x)
输出一个整数的16进制(8进制)cout<<hex<<uppercase<<x; (uppercase表示大写)
输出特殊字符 \ “ 等 \\ \t
关掉同步,读写缓冲 ios::sync_with_stdio(false);
改变键盘屏幕读写到文件读写 freopen(“1.in”,”r”,stdin); freopen(“1.out”,”w”,stdout);这样后面的都写全部换向到文件,信息学奥赛有人这样写:
#define file(z) freopen(z".in","r",stdin),freopen(z".out","w",stdout) 也很有意思的。
经过了一段时间的学习,可以考虑使用scanf和printf进行输入输出,他们是为了兼容早期的C语言 而留下来的,最主要的特点是速度快。
考试的时候用文件进行输入输出,这就要在main函数里,cincout前加上文件关联语句,写成如下,还得在头文件里面包含cstdio
读到文件尾会产生一个错误码,
cin不能读入带空格的字符串,要换用 geiline(cin,s)
格式化输入语句scanf和格式化输出语句scanf在考试里面常常被用到,实验表明,在大量数据的读入时scanf耗时远小于cin,所以一般情况下高手都用scanf,更有高高手使用快读技术,核心是getchar和putchar,据说更快。
printf可以按照所需的格式输出数据,比如保留两位小数,输出16进制数等。
例子:x=1.0/6;printf(%.2f,x); 输出x保留两位小数。
printf(“%X”,x) 按十六进制输出一个数。
printf(“%O”,x) 按八进制输出一个数。
while(scanf(“%d”,&a)!=-1) {} 连续不断的读到文件尾
手动测试时ctrl+z或者F6表示输入结束
看看如下几个题目对应的读法
输入N和N个正整数,求他们的和 cin>>n;while (n--) {cin>>x;s+=x;}
输入若干正整数,以-1结尾,求他们的和,-1不包含在内cin>>x;while (x!=-1) {s+=x;cin>>x;}
in文件里面有若干正整数,求他们的和 while(cin>>x) s+=x;cout<<s; 注意中断这个要用F5或者ctrl_z
快读快写技术()
快读即快速读入,因为getchar比scanf要快,所以可以用getchar()代替scanf。
利用getchar()将输入的数字挨个判断,第一个while判断符号正负;第二个while判断数字并进行该数字的运算,每读入一个数字就将之前的数乘以十加上这个新的数字;两个while都不符合就说明该数输入完毕,返回该数的总值即绝对值*符号位。
inline int read(){
register int x = 0, t = 1;
register char ch=getchar(); // 读入单个字符到寄存器
while(ch<'0'||ch>'9'){
if(ch=='-')
t=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48); // 移位与异或
// 第十行可以换成 x = x * 10 + ch - '0'
ch=getchar();
}
return x*t;
}
快写
inline void write(int x)
{
if(x<0){
putchar('-');
x=-x;
}
if(x>9)
write(x/10);
putchar(x%10+'0');
}
格式化读入 13:23:54 cin>>ch;
混读很可怕! 123DEF linux 下的回车!
3. 几个常用的函数
floor(x) ceil(x) round
int(-2.3) floor(-2.3)
pow(x,y) x的y次方,返回是实数,可以用于大略估算,比如开方,三次根等。
log(x)= ln(x)
log10(x) log2(x)
swap(x,y)
min(x,y)
isalpha() / isdigit() / isalnum() / islower() / isupper()
tolower/toupper
memset和memcpy(注意结合)
4. 常用的字符串函数
geiline整行读入数据,一般的cin或者scanf的读入是以空格为分隔的,要是读入含有空格的数据,比如外国人的姓名,cin和scanf就很麻烦,可以考虑使用geiline或者gets,但要注意最好全程getline,用了getline再混用cin和sacnf不是件好事。
假设字符串为s,重载了 + < > 等
s.size()和s.length()都是表示它的长度,但是注意他们的类型。
s[i]和s.at(i)表示它的第i位,
s.substr(i,j) 是截取s串从第i位开始的连续j个,得到一个新的字符串;
s.erase(i,j) 是删除从s串从第i位开始的连续j个,注意不是第i到第j位;
s.find(t,i)是在s串第i位开始的地方开始查找t串,输出t串的起始位置,未找到就输出-1;
s.insert(t,i) 是把t串插到s串第i位开始的地方,后面的顺移;
5. 位操作
Xor的妙用
求不超过x的最大2的幂次方 100 输出64 200 输出128
6. 控制语句
;和,
a=b是有值的
i++与++i
if,for,while, do while,
break,continue,return
|
|