1、要将一个字母大小写变换一下,可以用这种方法:
char s
s^=32; //s^=(1<<5)也可以
2、创建set并初始化,利用set判断某个元素是否在set中。set类是有序的。
set<char> setJ(std::begin(setK),std::end(setK)); // 创建K的副本
for(char s:S)
if(setJ.count(s)) res++;
3、double变量不能用==判断是否相等,因为精度问题
4、右移操作符本身不修改变量值,会返回一个移位后的值:
a=a>>1
5、P1为int指针,P2为int值。
int* p1,p2;
6、类传递一般用const 引用。
7、内联函数适合用于小且非递归的函数,且内联声明和定义都需要在开头加上inline。
8、将表达式传递给函数引用参数会报错。
9、单精度浮点数用23位来储存尾数,小数点前还有一位隐藏的1,所以一共可以表示10^7<2^24<10^8,所以单精度浮点数的有效位数为7,如果考虑第7位为四舍五入问题,则最少有效位数为6位;同样双精度浮点数的尾数用52位存储,即有效位数为16位,考虑四舍五入则为15位。
10、下面程序中的v为m的引用:
hanshu((m)){ v=m; }
11、m=!!n :如果n>0,m=1;如果n==0,m=0!
12、一个数字异或它自身结果为0!
13、一个指针指向字符串,当字符串为空则不代表指针为NULL,这两种情况需要分别考虑!
14、像下面这么用不行,因为s只是一个复制,并不会改变容器中字符串的值:
for(string s:rightRes)
s=curStr+s;
下面这么用可以:
for(string& s:rightRes)
s=curStr+s;
15、关于二维容器:
vector<vector<int>> num;
num.push_back({i,j}) // 可以直接这么输入
16、string.find_first_of("abcdef",i),从第i个元素开始 寻找 在前一个字符串常量中包含的字符 的下标;string.find_last_of( )同理...
i = s.find_first_of("aeiouAEIOU", i);
j = s.find_last_of("aeiouAEIOU", j);
17、利用 c库函数 atoi 将 string 转换为 int:
#include<stdlib.h> // atoi
string a = "1234";
int b = atoi(a.c_str()); //需要const char* 类型参数(c中字符串类型)
其实也可以使用C++11添加的函数版本:
#include<string> // stoi
string a = "1234";
int b = stoi(a);
其他还有类似的 stol(long), stof(float), stod(double)
除了 to_string( ) 函数,还可利用 stringstream 将 int 转换为 string:
int a = 1234;
stringstream ss;
ss<<a;
string str = ss.str();
20、
string[10]="asdfghjkl";
cout<<*string; //输出字符串
21、调用时钟函数,可以测试代码的运行时间:
clock_t time1=time();
...
clock_t time2=time();
cout<<time2-time1<<endl;
22、unordered_map<char, int> exmap;对象使用 exmap[c]++ 时,假如map中存在c键,对应值会+1 ;假如不存在,则会添加<'c',1>键值对。
23、unordered_set使用insert方法时加入原set中不存在则会添加,否则只是不添加但不会报错。