Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用循环中间的迭代器_C++_Iterator - Fatal编程技术网

C++ 使用循环中间的迭代器

C++ 使用循环中间的迭代器,c++,iterator,C++,Iterator,我有一个向量“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 } vector::const_迭代器点; int i,k; (

我有一个向量“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
}
vector::const_迭代器点;
int i,k;
(假设k=10)
对于(i=k,points=mydata.begin()+k;i!=-1;i--,points--){
//做事
}
这种方式是向后迭代的正确方式吗?(我使用DEV C++,所以谓词和一些现代命令不能使用。)
希望您的建议能够做到这一点。

使用
反向迭代器的可能解决方案,以及:

#包括
#包括
int main()
{
std::向量v;
对于(int i=0;i<10;i++)
{
v、 推回(i);
}
对于(std::vector::const_reverse_iterator it=v.rbegin()+(v.size()/2);
它!=v.rend();
it++)
{

std::cout使用
reverse\u迭代器的可能解决方案和:

#包括
#包括
int main()
{
std::向量v;
对于(int i=0;i<10;i++)
{
v、 推回(i);
}
对于(std::vector::const_reverse_iterator it=v.rbegin()+(v.size()/2);
它!=v.rend();
it++)
{

std::cout您可以使用std::vector::const_reverse_迭代器。下面是如何从中间开始反向迭代向量的示例:

#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;
}

您可以使用std::vector::const_reverse_迭代器。下面是如何从中间开始向后迭代向量的示例:

#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;
}

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

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

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

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

大致有两种很好的解决方案。要么编写循环:

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

大致有两种很好的解决方案。要么编写循环:

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

你真的应该升级到一个最新的IDE和编译器。5年前,DEV-C++是垃圾。上次它是过时的垃圾。Jalf:好的。谢谢。任何免费版本PLZ。Windows上的哪个OS?你可能想看看MS VisualC++Express。如果你想要一个跨平台的IDE,代码有::块或Eclipse或A.还有一些。你自己选吧,或者直接用谷歌。@jalf:是的,windows xp。thanks@jalf:你说对了一半-Dev-C++是垃圾,但它确实是垃圾。你真的应该升级到最新的IDE和编译器。Dev-C++在5年前上次维护时是垃圾。今天,它是过时的垃圾。@jalf:好的。谢谢。有免费版本的plz.Wh吗在Windows上,你可能想看看MS VisualC++快车。如果你想要一个跨平台的IDE,代码有::Buffor或Eclipse或者其他几个。选择你的选择,或者只是使用谷歌。@是的。thanks@jalf:你说对了一半-Dev-C++是垃圾,但它确实是垃圾。[不是我的反对票]
i
是多余的,因为你可以直接使用
v[k]
而不是
*(i+k)
。问题是关于使用迭代器,但你要使用索引。@MSalters:注意了。我想他想知道如何反向迭代向量。[不是我的反对票]
i
是多余的,因为你可以直接使用
v[k]
而不是
*(i+k)
。问题是关于使用迭代器,但您使用的是索引。@MSalters:注意得好。我想他想知道如何反向迭代向量。