c++提纲挈领之冰山一角,持续更新!

1.unsigned char与char的使用
只要注意当把这个字符赋值给int或longlongint时即可,当有这种赋值需求时就要用unsigned char了因为不会把最高位当作符号为处理,否则用char会出错!
2.输出十六进制时的技巧
cout<<"\x"<<hex<<uppercase<<setw(2)<<(int)c;如这句话所示,uppercase只会用在这种场合,用于16进制输出时的字母会大写。
3.cin不能读入空行,用getline可以读入空行
4.输入字符串时用getline不用ios::sync_with_stdio(false); cin.tie(0);用cin可以用。(错误的感性认识
5.其实用getline时可以用ios::sync_with_stdio(false);他是这样一种情况:因为我们用getline时通常前面会输入一个整数这时我们通常会用getchar()吃掉\n如果此时用ios::sync_with_stdio(false);会在输入字符串时导致第一个输入的字符串丢失;而如果不用getchar的话,getline读入的第一个字符串是\n如果说你不在乎这个影响那么就可以用ios::sync_with_stdio(false)。故应该是有getchar不用ios::sync_with_stdio(false),没有可以用ios::sync_with_stdio(false)但是第一个读入的字符串是\n.(正确但没用的感性认识
解决办法:
如果我们关闭了同步流即ios::sync_with_stdio(false),意味着C与C++的缓冲区错位分开,这时如果我们继续选择用C函数getchar()那么他就会去c的缓冲区去读但是没有内容,所以我们要用C++函数cin.get(),从而读取的c++的缓冲区这才达到我们的目的:吃掉一个字符。正确思路就是用ios::sync_with_stdio(false)的时候用cin.get()即可。(正确的理性认识
参考

6.C++ STL set::find是如何判断两个元素相等的?重载<操作符后,通过一下规则来判断: if(!(A<B || B<A)),当A<B和B<A都为假时,它们相等。故像使用find时候不需要重载==之类的,仅重载<即可。
7.我们需要明白这些基本数据类型:char,unsigned char,int,unsigned int,long long int,unsigned long long int等等都只是为了限制输入的变量在内存中所占的地址是多少位,并不要片面的将这些符号同整型,字符型等固化起来。
像是int我当然可以按%c输出,char当然也可以%d输出…这些都不是重点。只要自己知道,奥,原来我用的数据没超过255(十进制下),那为了节省空间我就用个unsigned char就行了呗,或者没超过127,那用个char也无所谓,当然了如果超过127了你还要用char那就会出错,这个出错不是说存不了了,是指存的数不是你想存的哪个数了例如你存128,其实存的是-128。具体数据类型怎么转换的如下:
(1)从4字节的int类型转换成1个字节的char类型,则取int数据的最低的一个字节,将这个字节的数据赋给char型数据,且是有符号的,即首位为符号位;而如果是从int转换成unsigned char类型,则整个一个字节都是数据,没有符号位。
(2)从char转换为int:则在前面的三个字节补符号位,即补上0xffffff(char的首位为1),或0x000000(char的首位为0)。从unsigned char转换为int,则前面补上0x000000.
8.关于stl容器:
所有的容器凡是有insert这个函数的,其中一个是
iterator insert( iterator loc, const TYPE &val );
即必须用迭代器指明插入位置
而且返回的是i插入的元素的迭代器

C++ Vectors能够使用标准运算符: 等于, !=, <=, >=, <, 和 >. 要访问vector中的某特定位置的元素可以使用 [] 操作符
两个vectors被认为是相等的,如果:
它们具有相同的容量
所有相同位置的元素相等,如果元素为结构体需要重载等于号,friend operator==(Node n1,Node n2)即可

vector、list、deque、map、set这五个都会含有这两种erase
iterator erase( iterator pos );
iterator erase( iterator start, iterator end );
并且返回值是一个iterator,指向被删除元素的后一个元素
并且对于set和map还会多一个按值删除的erase:
size_type erase( const key_type &key );
并且返回被删除元素的个数

vector v(5,1);
vector v2(5,2);
v.swap(v2);
cout<<v.at(0);

只有map和set才会有自己的find函数,才会有自己的lower_bound和upper_bound函数

只有list有自己的sort函数

basic_string &replace( size_type index, size_type num1, const char *str, size_type num2 );
用str的从0开始的num2个字符去替换num1的从index开始的num1个字符
basic_string &replace( iterator start, iterator end, const char *str );
basic_string &replace( iterator start, iterator end, size_type num, char ch );
9.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值