2016-10-13 56 views
0

我想以相反的順序遍歷一個向量,並檢查是否連續出現數字1.我如何防止在檢查第一個(最後一個)時出界 )元素。 這是我寫到現在爲止的代碼。提前致謝。反向遍歷一個向量並獲取相鄰元素的值

vector<int> bits; 

for (vector<int>::reverse_iterator i = bits.rbegin();i != bits.rend(); ++i) { 
    int ctr = 0; 
    auto be = bits.rbegin(); 
    auto prev = std::next(be, ctr); 
    auto nx = std::next(be, ctr - 1); 

    if ((*nx) == 1 && (*be) == 1) 
    { 
      count_one++;  
    } 
    ctr++; 
} 
+0

爲什麼你需要向後迭代?拋開錯誤,無論是向前還是向後迭代,所示示例都會給出相同的結果。 –

+1

在循環中使用'std :: adjacent_find'。 – PaulMcKenzie

+0

*並檢查連續存在* - 什麼是「檢查」應該包含?如果只是說某處有連續的'1',那麼就如我的評論所述,這是一個使用'std :: adjacent_find'的單行程序。 – PaulMcKenzie

回答

0

這是我完成工作的代碼。希望這可以幫助某人。

std::vector<int>::iterator i = bits.begin(); 
if (bits.size() > 1){ 
    while (i < bits.end() - 1) { 
     pr = std::next(i, 1); 
     if (*i == 1 && *pr == 1) { 
      count_one = count_one + 1; 
     } 
     i = i + 2; 
    } 
} 
+0

當然,你只會在檢查vector'bits'不是空的後才這樣做,對嗎? (否則'bits.begin()+ 1'是未定義的行爲)。 –

+0

謝謝你指出。我更正了代碼。 –