我有一个程序,在这个程序中我需要做一个deque
足够长的时间来保存某个索引处的项目。我用下面的循环,扩大deque
:为什么一个deque的大小会少于一个小数?
while(int1+deque1.size()<=int2){
deque1.push_back(0);
}
当两个int1
和int2
是-1
(以及其他许多情况下,这是一个我注意到在调试时),deque1
成长为一个可怕的尺寸(几十万的项目),但循环不断。为什么是这样?
我有一个程序,在这个程序中我需要做一个deque
足够长的时间来保存某个索引处的项目。我用下面的循环,扩大deque
:为什么一个deque的大小会少于一个小数?
while(int1+deque1.size()<=int2){
deque1.push_back(0);
}
当两个int1
和int2
是-1
(以及其他许多情况下,这是一个我注意到在调试时),deque1
成长为一个可怕的尺寸(几十万的项目),但循环不断。为什么是这样?
deque :: size()返回一个unsigned long int,因此int1和int2必须是正数,否则你会得到一个溢出。
这是编译器自动生成的代码。
while(static_cast<unsigned long>(int1)+deque1.size()<=static_cast<unsigned long>(int2)){
deque1.push_back(0);
}
因此,如果(例如)INT1是一个8位的无符号整数,并且你给它的值-1,就会变成(2^8 - 1 = 255)。这就是位编码在计算机中的工作原理。
的解决方案可能是以下几点:
while(int1+static_cast<ptrdiff_t>(deque1.size())<=int2){
deque1.push_back(0);
}
干杯。
打开警告。 – chris 2013-04-06 19:30:25
'deque1.size()'返回一个无符号类型的值 – 2013-04-06 19:30:52
顺便说一下,'std :: deque'有一个'resize()'函数。 – chris 2013-04-06 19:32:16