我有一個程序,在這個程序中我需要做一個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