完整代码我就不贴了,带了业务。
贴个demo:
int demo(vector<int> vec,int i){
while(i<vec.size()){
cout<<(i<vec.size()); //这里endl都接不上
cout<<endl;
i++;
}
}
int main(){
vector<int> vec = {1,2,3,4};
demo(vec,-1);
return 0;
}
好家伙,直接就跳过循环了。 给我唬的一愣一愣的。
我寻思着这个大小也没错啊。。。
1、size() 的返回值是 size_t。(这个我知道啊) 2、size_t是无符号类型。(这个我也知道啊) 3、若和int进行比较时,会先把int类型转换为无符号类型再做比较。(那这个就有点意思了哈) 4、当出现负数,比如-1时,对应的无符号是4294967295,程序将会陷入错误中!(好家伙)
这个,如果不知道其中细节,怎么调试啊?
ssize_t是有符号整型。
所有的 sizeof 类型函数,比方说这里的 STL size(),又或者 strlen 等,遇到的时候再往这里面添加。
此外,要注意有些函数使用 size_t 类型的参数。
今后遇到有符号数和无符号数之间的运算时要千万小心。如果不放心,那就手动把无符号数强转为有符号数。
#include<iostream>
using namespace std;
int main() {
int a = 1;
float b= 0.99999999;
cout << (a > b);
}
试一下。
#include<iostream>
using namespace std;
int main() {
int a = 1;
float b= 0.99999998;
cout << (a > int(b));
}
这样也是没用的哈。
那怎么办?
一般不会这么刚好哈,那要真这么刚好,你去网上也不好找,我给你提供个方案,瞧好了:
#include<math.h>
#include<iostream>
using namespace std;
int main() {
int a = 1;
float b= 1.99999999999;
int c = ceil(b);
int d = floor(b);
cout << c << endl;
cout << d << endl;
}
遇到要比较的时候,如果觉得有可能会出现这么刚好的情况,那就先判断一下是不是这么刚好了。
整数向上取整和向下取整都是那个数,一样的。
那判断出来了那么刚好,怎么办?
那我也没办法了,,,, 我觉得吧: 1、回头想想为什么会出现这种情况,是不是前面的设计就出问题了, 2、自求多福吧,哪天我灵机一动想到办法了再补进来。
int main() {
char c[10] = "12345";
char *p = c;
std::cout << p << std::endl; //c
std::cout << *p << std::endl; //c[0]
std::cout << &p << std::endl; //p的地址
std::cout << &c[0] << std::endl;//c
std::cout << &c << std::endl; //c[0]的地址
std::cout << &(*p) << std::endl; //c
std::cout << *(&p) << std::endl; //c
std::cout << *p+1 << std::endl; //c[0]的值加一
std::cout << *p+2 << std::endl;
std::cout << *(p - 1) << std::endl;//空
std::cout << *(p + 2) << std::endl;//3
std::cout << *c << std::endl;
return 0;
}