C++ 什么';对向量使用迭代器和for循环的区别是什么

C++ 什么';对向量使用迭代器和for循环的区别是什么,c++,for-loop,vector,iterator,C++,For Loop,Vector,Iterator,我想找出这段代码之间的区别: Vertices { int x; int y; }; vector<Vertices>point; Vertices min1,max1; i = point.begin(); min1.y = i->y; min1.x = i->x; max1.x = i->x; i++; if(i->x < min1.x) { min1.x = i->x; } else { max1.x = i->

我想找出这段代码之间的区别:

Vertices {
int x;
int y;
};

vector<Vertices>point;
Vertices min1,max1;

i = point.begin();

min1.y = i->y;
min1.x = i->x;
max1.x = i->x;

i++;

if(i->x < min1.x)
{
    min1.x = i->x;
}
else
{
    max1.x = i->x;
}
顶点{
int x;
int-y;
};
矢量点;
顶点min1,max1;
i=点。开始();
min1.y=i->y;
min1.x=i->x;
max1.x=i->x;
i++;
如果(i->xx;
}
其他的
{
max1.x=i->x;
}
该代码:

min1.y = point[0].y;
min1.x = point[0].x;
max1.x = point[0].x;    
for (int i = 1; i < point.size(); i++) {
        if (point[i].x < min1.x)
            min1.x = point[i].x;
        else
            max1.x = point[i].x;
    }
min1.y=点[0].y;
min1.x=点[0].x;
max1.x=点[0].x;
对于(int i=1;i
编辑

我已经添加了第二段代码从第二个元素迭代的原因。我所做的是比较并得到最大值和最小值。我不明白的是为什么他们给我两组不同的值?我误解了什么吗?

如果要将其作为数组循环,应该从0开始,而不是从1开始

int i = 0;
下注如下:

for (std::vector<xxx>::iterator it = point.begin(); it != point.end; ++it)
for(std::vector::iterator it=point.begin();it!=point.end;++it)

第一个区别是,在第一种情况下,没有循环。它只处理第一个元素

第二个区别是,当第二种情况下有第0个元素时,从1开始。它处理除第一个元素之外的所有元素


即使使用迭代器,也必须有一个循环。使用和不使用迭代器之间的区别只是一种方便。迭代器只是访问向量中元素的不同接口。

迭代器
std::vector::iterator itr
从向量的开头开始,默认情况下,它是
std::vector myVector
的第一个值

使用数组时,应该从第一个元素开始,即
[0]
而不是
[1]

下面是一个在for循环中使用迭代器的简短示例(在我的代码中):

void Rep_C_F_in_Ex (std::vector<std::string> *vTestTwo)
{
    std::vector<std::string> vTestOne_;
    for (std::vector<std::string>::iterator itr = vTestTwo->begin(); itr != vTestTwo->end(); itr++)
    {
        boost::split_regex (vTestOne_, *itr, boost::regex (",") );

        for (std::vector<std::string>::iterator iterate = vTestOne_.begin(); iterate != vTestOne_.end(); iterate++)
        {
            vTestThree.push_back (*iterate);
            ++iterate;
            vTestFour.push_back (*iterate);
        }
    }
}
void Rep_C_F_in_Ex(std::vector*vTestTwo)
{
std::向量vTestOne;
对于(std::vector::迭代器itr=vTestTwo->begin();itr!=vTestTwo->end();itr++)
{
boost::split_regex(vTestOne_,*itr,boost::regex(“,”);
对于(std::vector::iterator iterate=vTestOne_u2;.begin();iterate!=vTestOne_2;u2;.end();iterate++)
{
vTestThree.push_back(*迭代);
++迭代;
vTestFour.push_back(*迭代);
}
}
}

迭代器是指针的通用抽象。它们本身不会自动循环通过容器。我想你的意思是,你的第一个代码样本在循环中?第一个示例没有循环,第二个有循环。@greatwolf如果我正确地理解了第一个代码片段,它只运行第二个元素,通过从第一个元素到第二个元素的比较,得到大n小
x
。那么为什么第二个代码段的工作方式不一样,结果也不一样,因为它在向量中运行,并将
x
与每个元素进行比较?你能发布更多的代码吗,例如
min1
max1
x
y
是什么?还有一件事。您的迭代器是
vector::iterator i对吗?在我看来,他们应该给你们两个相同的输出,就像
min1.x=i->x=
min1.x=点[i].x。是的,我同意。但出于某种原因,它不是。这就是我想知道的。第一个代码段给出了正确的值,但第二个代码段没有。这让人费解。您是否尝试过在for循环中使用
迭代器?就像我上面的代码。我还没有为此使用整数。您修复了第二个错误,但您的第一个问题仍然存在,您没有循环。所以我正确地说,第一个代码段只访问向量的第一个和第二个元素?那么,当第二个代码段也可以实现结果时,它为什么会给我正确的值呢?你是对的。好。您确定您的测试阵列足够好吗?代码的其他部分发生了什么?你能把所有的都贴出来吗?