我想找出这段代码之间的区别:
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个不同的价值观?我误解了什么错误吗?
答案 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)