2012-02-09 57 views
0

我有一個向量「mydata」的向量。我想在負方向上迭代我的數據。迭代器應該從中間開始。 我想用下面的方法;從循環中間使用迭代器

vector<vector<int> >::const_iterator points; 
int i, k; 

(lets assume k = 10) 

for (i=k, points=mydata.begin()+k; i != -1; i--, points--){ 

    //do stuff 
} 

這樣做是否正確地向後迭代? (我正在使用dev C++,所以不能使用謂詞和一些現代命令。) 希望你的建議能夠做到這一點。

+1

你應該真的真的真的升級到了最新的IDE和編譯器。 5年前,Dev-C++在上次維護時是垃圾。今天,它是*過時的*垃圾。 – jalf 2012-02-09 11:34:11

+0

@jalf:好的。謝謝。任何免費版本PLZ。 – gnp 2012-02-09 11:55:41

+0

哪個操作系統?在Windows上,您可能需要查看MS Visual C++ Express。如果你想要一個跨平臺的IDE,那麼就有Code :: Blocks或者Eclipse或者其他一些IDE。拿你的選擇,或只使用谷歌。 – jalf 2012-02-09 12:06:14

回答

0

既然是矢量,你不需要在所有使用迭代器:

for (int k = 4; k >= 0; k--) 
{ 
    // do something with v[k] 
} 

實施例:

#include <iostream> 
#include <vector> 
using namespace std; 

int main(int argc, char** argv) 
{ 
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; 
    vector<int> v(arr, arr + 10); 

    for (int k = 4; k >= 0; k--) 
    { 
     cout << v[k] << endl; 
    } 
} 

輸出:

5 
4 
3 
2 
1 
+0

謝謝,用你的方式去。 – gnp 2012-02-09 11:54:09

+0

爲什麼downvote? – LihO 2012-02-09 12:18:04

+1

[not my downvote]'i'是多餘的,因爲你可以用'v [k]'而不是'*(i + k)'。問題是關於使用迭代器,但您使用索引。 – MSalters 2012-02-09 12:32:11

4

使用reverse_iterator小號vector::rbegin()vector::rend()一個可能的解決方案:

#include <iostream> 
#include <vector> 

int main() 
{ 
    std::vector<int> v; 
    for (int i = 0; i < 10; i++) 
    { 
     v.push_back(i); 
    } 

    for (std::vector<int>::const_reverse_iterator it = v.rbegin()+(v.size()/2); 
     it != v.rend(); 
     it++) 
    { 
     std::cout << *it << "\n"; 
    } 

    return 0; 
} 
2

您可以使用std ::矢量::的const_reverse_iterator。下面是如何通過矢量向後迭代,從中間開始的例子:

#include <iostream> 
#include <vector> 
int main() 
{ 
    std::vector<int> v; 

    for(int i = 0; i< 10; i++) 
     v.push_back(i); 

    std::vector<int>::const_reverse_iterator it = v.rbegin() + 5; 


    for(;it != v.rend(); it++) 
    { 
     std::cout << *it << std::endl; 
    } 

    return 0; 
} 

輸出:

4 
3 
2 
1 
0 
0

大致有兩種很好的解決方案。要麼你只是編寫循環:

vector<int>::const_iterator i = v.begin() + 4; 
do { 
    // stuff with *i 
while (--i != v.begin()); 

或使用反向迭代器和標準STL算法:

std::for_each(v.rend()-4, v.rend(), &stuff);