一. 报错原因总结
(1) 越界错误
Line 1240: Char 9: runtime error: addition of unsigned offset to 0x7f6676300030 overflowed to 0x7f667630002f (basic_string.h)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/basic_string.h:1249:9
C++13的string类型在使用.back()方法的时候不会考虑string是否为空,如果string为空的话会有越界错误
二. 需要背诵的程序片
(1) 排序算法 + lambda表达式
vector<int> v;
//需要对v从大到小排列
sort(v.begin(), v.end(), [](int a, int b){return a>b;})
(2) 整数转二进制字符串
string Binary(int x){
sring result;
while(x){
result.push_back('0' + (x & 1));
x >> 1;
}
reverse(result.begin(), result.end());
return result;
}
(3) 阶乘factorial
Although there is no C function defined specifically for computing factorials, C math library lets you compute gamma function. Since Г(n) = (n-1)! for positive integers, using tgamma of i+1
yields i!
.
三. 经常用到的常量认知
(1) int32,int64,long,long long,float,double对应的数据的最大和最小值分别是多大:
std::cout << setiosflags(ios::scientific) << "INT32_MAX: " << (float)INT32_MAX
<< std::endl;
std::cout << setiosflags(ios::scientific) << "INT32_MIN: " << (float)INT32_MIN
<< std::endl;
std::cout << setiosflags(ios::scientific) << "INT64_MAX: " << (float)INT64_MAX
<< setiosflags(ios::scientific) << std::endl;
std::cout << setiosflags(ios::scientific) << "INT64_MIN: " << (float)INT64_MIN
<< std::endl;
std::cout << setiosflags(ios::scientific) << "LONG_MAX: " << (float)LONG_MAX
<< std::endl;
std::cout << setiosflags(ios::scientific) << "LONG_MIN: " << (float)LONG_MIN
<< std::endl;
std::cout << setiosflags(ios::scientific)
<< "LONG_LONG_MAX: " << (float)LONG_LONG_MAX << std::endl;
std::cout << setiosflags(ios::scientific)
<< "LONG_LONG_MIN: " << (float)LONG_LONG_MIN << std::endl;
std::cout << setiosflags(ios::scientific)
<< "FLOAT_MAX: " << std::numeric_limits<float>::max() << std::endl;
std::cout << setiosflags(ios::scientific)
<< "FLOAT_MIN: " << std::numeric_limits<float>::min() << std::endl;
std::cout << setiosflags(ios::scientific)
<< "DOUBLE_MAX: " << std::numeric_limits<double>::max()
<< std::endl;
std::cout << setiosflags(ios::scientific)
<< "DOUBLE_MIN: " << std::numeric_limits<double>::min()
<< std::endl;
std::cout << setiosflags(ios::scientific)
<< "DOUBLE_T_MAX: " << std::numeric_limits<double_t>::max()
<< std::endl;
std::cout << setiosflags(ios::scientific)
<< "DOUBLE_T_MIN: " << std::numeric_limits<double_t>::min()
<< std::endl;
结果: