2017-04-23 25 views
0

我有一個由size_t索引的二維矩陣表示的圖像。我不想有一個函數給出了一個位置,如果這個位置在這個圖像的邊界內,它就會返回。使用無符號數檢查圖像邊界

在哪裏我會使用這樣的功能,是f.e.在填充算法中,我將在檢查一個像素後,將它圍繞4個像素推入隊列。如果我檢查的像素位於0 x或y上,這意味着inBounds函數將被(x-1,y)和(x,y - 1)調用,則會發生問題。由於size_t未簽名,我無法合理檢查x或y是否爲< 0.

我該如何處理這些情況?我應該只檢查底部和左邊界,並假設如果給定的位置在圖像的右上方,它將會是巨大的數字嗎?

+0

爲什麼不使用'int'? –

回答

1

每次在涉及帶符號整數的操作中使用它們時,您只需投射(static_cast)您的size_t值到signed int

通常,混合簽名和未簽名的數字不是一個好主意。無符號數字只不過是一種黑客,它允許兩倍於同樣數量的位的範圍,正如它們造成的,正在造成並將會給世界各地的程序員帶來無數的問題一樣。這就是爲什麼像Java這樣的語言完全廢除了它們。當我第一次從C++移動到Java時,我真的錯過了未簽名的數字,但過了一會兒,「我學會了不再擔心和喜歡這個炸彈。」