2011-10-20 36 views
0

我有一個大型數組,以及一些循環遍歷最後N個元素的操作,其中N在每種情況下都不相同。每個索引都有一個索引變量,每個索引都以不規則的間隔更新,此時其位置增加一個元素。 (該陣列是一個音頻緩衝區,操作正在將其不同部分複製到輸出中)。使用模數循環遍歷數組子部分?

所以一個正常的循環結構是不可能的。我之前正在遍歷整個數組,所以每次更新索引時,我都可以簡單地使用數組長度對mod值進行測試,並在必要時進行重置。我認爲我需要類似的東西,但包含一個偏移量重置索引(array_size - N),而不是零。

我敢肯定,這有一個簡單的解決方案 - 對不起,如果我錯過了盲目明顯!

+0

你能舉個例子說明你需要什麼嗎?我不確定我瞭解你的問題。 –

+0

C或C++?選一個。 –

+0

對不起,我意識到我提出的問題很糟糕,因爲for循環是不可能的。只要快速發佈這個消息來阻止其他人浪費他們的時間 - 我會盡快編輯這個問題。 – IainM

回答

1
for(unsigned int i = std::max(0u, array.size() - N); i < array.size(); ++i) 

+0

plz2formatUrPosts!你已經有2年3個月的時間來學習如何。 –

+0

我剛剛看到你寫了'你'。這是正確的語法? – Nawaz

+0

其實我在這2年3個月裏已經做了超過在stackoverflow發佈,但我將在未來努力。 – Ylisar

0

如果你知道數組的長度,這是很容易

int L=length; 
int* array; 

int* start=array+length-N; 
for(i=0;i<N;i++){ 
    doSomething(start[i]); 
} 

如果你正在尋找一個模運算,使用%

int i=0; 
while(condition){ 
    i++; i%=N; // increment i, modulo N 
} 
3
// loop over last N 

sometype array[maxsize]; 

for (sometype* p = array + maxsize - N; p < array + maxsize; ++p) 
{ 
... 
} 
1

怎麼樣一個for循環無法啓動最後,例如像這樣:

for (int i = array_size; (i >= 0) && (i >= (array_size - N)); i--) 
    operation(array[i]); 

你可能不需要modulo操作符,除非我不能正確理解你的問題。