使用Iterator和for循环的向量有什么区别

时间:2013-11-07 07:00:24

标签: 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->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;
    }

修改
我已经添加了为什么第二段代码从第二个元素迭代。我正在做的是比较并获得最大和最小的值。我不明白为什么他们给我2个不同的价值观?我误解了什么错误吗?

3 个答案:

答案 0 :(得分:4)

第一个区别是你在第一种情况下没有循环。它只对待第一个元素。

第二个区别在于,当你在第二种情况下有第0个元素时,从1开始。它首先处理所有元素。

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

答案 1 :(得分:1)

迭代器std::vector<typename>::iterator itr从向量的开头开始,默认情况下是std::vector<typename> 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);
        }
    }
}

答案 2 :(得分:0)

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

int i = 0;

Bettor将其写成如下:

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