cpp5-tips
YeeKal
•
•
"#"
auto 遍历
//c++11
int a[]={1,2,3,4};
std::vector<int> a={1,2,3,4};
for(auto& e:a){
std::cout<<e*2<<std::endl;
}
/*
1. auto &&: modifiable access(不太理解,vector<bool>)
2. auto &: reference access
3. const auto &: read-only access
4. auto: local copy
*/
string -- int
/* char[] */
atoi(); //char[] to int
itoa(); //int to char[]
/* string */
#include <string>
stoi(); //string to int
stod(); //string to double
to_string(); //double/int to string
//大小写转换
char c,a;
if(isupper(c)) a=c+32;
else a=c-32;
// int溢出
// 用一个long先存储数据
long res=0;
int sign=1;
while(isdigit(str[i]) && i<str.size())
{
res=res*10+(str[i++]-'0');
if(res>INT_MAX)
{
if(sign==1) return INT_MAX;
else return INT_MIN;
}
}
return res*sign;
//商和余数
int a,b;
a/b;
a%b;
#include<math.h>
double a,b;
fmod(a,b);
tips
- sizeof(class) 只计算数据成员和虚函数表(地址)的大小,多重继承时,每一个继承维护一个虚函数。
- sizeof(char *) 为指针大小(4/8), 而sizeof(char[])为字符串长度
//try catch
/*
- 执行 try 块中的语句,如果执行的过程中没有异常拋出,那么执行完后就执行最后一个 catch 块后面的语句,所有 catch 块中的语句都不会被执行;
- 如果 try 块执行的过程中拋出了异常,那么拋出异常后立即跳转到第一个“异常类型”和拋出的异常类型匹配的 catch 块中执行(称作异常被该 catch 块“捕获”),执行完后再跳转到最后一个 catch 块后面继续执行。
*/
try {
语句组
}
catch(异常类型) {
异常处理代码
}
...
catch(异常类型) {
异常处理代码
}
初始化数组
//1. 全局变量和静态变量初始化时会自动被设置为0
int arr[1024]; // This is global
int main(void)
{
//statements
}
//2. 如果一个数组被部分初始化,没有被初始化的元素会被自动设置为相应类型的0
int is[26]={0};
// 3. memset
随机序列
//随机打乱一个序列
//O(n)
vector<int> res;
for(int i=0;i<size_;i++){
int pos=rand()%(size_-i);
int tem=res[i+pos];
res[i+pos]=res[i];
res[i]=tem;
}
缺失数字
位运算中的异或
给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。
示例 1:
输入: [3,0,1] 输出: 2
示例 2:
输入: [9,6,4,2,3,5,7,0,1] 输出: 8
class Solution {
public:
int missingNumber(vector<int>& nums) {
int result=0;
for(int i=0;i<nums.size();i++){
result^=i^nums[i];
}
return result^nums.size();
}
};