假設我有一個向量v,其中包含m個元素,並且向量稱爲i的向量的隨機訪問索引。使用模運算符來保持容器的索引
當我增加索引,如果它超出界限,我想索引第一個(第零)元素。同樣,當我遞減索引時,如果索引是< 0,我想索引到最後一個元素。目前,我只通過容器一個元素同時移動,所以想出了這個功能:
unsigned int GetIndexModM(int index,unsigned int m) {return (index + m) % m;}
的調用點可能是這樣的:
std::vector<Whatever> v = ... // initialise with 5 elements
unsigned int i = 0;
unsigned int j = GetIndexModM(static_cast<int>(i) - 1,v.size()); // get preceeding index
此功能
unsigned int j = GetIndexModM(static_cast<int>(i) - 17,v.size()); // oops: returns -2
我的問題:什麼是最優雅的實現,需要的任意整數,並返回它的位置作爲一個指數函數但是如果一個減去值>米指數會失敗?
在某些平臺上,以比較爲代價避免第二次模運算可能會更快:'val = val%mod;返回val <0? val + mod:val;' –
當val <-mod_val',或者它只處理帶有-mod_val
@Andre Caron - 它在這種情況下工作,我又增加了一個例子(見上一頁printf)。 – dcp