2016-04-26 82 views
0

我有一個名爲mySize的成員變量,我想計算與地圖大小的差值,如myMap。在申報mySize時應使用哪種類型?我現在在使用uint32_t。 例如, 在myClass.h如何聲明將使用map.size()計算的int類型

static uint32_t getDifference(std::map<string, int> myMap); 
    static uint32_t mySize_; 

myClass.cpp

uint32_t getDifference(std::map<string, int> myMap){ 
    return std::abs(mySize_ - myMap.size()); 
} 

更新:在上面的代碼臨界錯誤。 std::abs不能用於uint32_t。但這與問題無關。我應該使用std::size_t而不是uint32_t

+3

這是'size_t'的類型。 –

+5

你複製整個地圖只是爲了問它的大小?這很原始 – Slava

+1

爲什麼你不檢查參考:['std :: map'](http://en.cppreference.com/w/cpp/container/map),['std :: map :: size ()'](http://en.cppreference.com/w/cpp/container/map/size)。或者,你可以查看源代碼 – Drop

回答

1

[社區維基儘可能多的信息對您已經張貼評論]

它應該是:

std::map<string, int>::size_type getDifference(const std::map<string, int>& myMap) 
{ 
    return mySize_ >= myMap.size() ? mySize_ - myMap.size() 
            : myMap.size() - mySize_; 
} 

上面的代碼檢查哪個更大,以避免減法像2 - 3,這對於無符號類型創建了一個非常大的數字,因爲-1無法表示:abs()發生的太遲而無法阻止它,並且對它看到的非常大的數字沒有任何作用。

實際上,使用size_t通常是因爲它更容易打字和讀取,幾乎總是實現用於size_type,並且無論如何 - 它肯定足夠大。