2

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

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

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

4

3 回答 3

4

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

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

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

于 2013-11-07T07:10:30.087 回答
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);
        }
    }
}
于 2013-11-07T07:13:28.040 回答
0

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

int i = 0;

投注者写如下:

for (std::vector<xxx>::iterator it = point.begin(); it != point.end; ++it)
于 2013-11-07T07:05:21.353 回答