使用循环中间的迭代器

use of iterators from the middle of the loop

本文关键字:迭代器 中间 循环      更新时间:2023-10-16

我有一个向量"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++,所以不能使用谓词和一些现代命令。)希望你的建议能做到这一点。

使用reverse_iteratorvector::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;
}

您可以使用std::vector::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

因为它是向量,所以根本不需要使用迭代器:

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

大约有两个不错的解决方案。要么你只写循环:

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);