gpt4 book ai didi

c++ - 将索引转换为迭代器

转载 作者:行者123 更新时间:2023-11-28 00:24:22 51 4
gpt4 key购买 nike

出于学习目的,我想使用迭代器重新创建以下代码。下面的代码检查 openFrameworks 中的一个框的边界,基本上它检查每当我的鼠标位置在 4 个矩形之一上时,它会将一个 bool 值变为 true,将其他的变为 false。我最近非常喜欢迭代器,但出于某种原因我无法使用迭代器进行这项工作,因为索引返回对象在 vector 中的位置,迭代器专门返回指向该位置对象的指针。这是代码:

 for ( int i = 0; i < answersBox.size(); i++){
for ( int j = 0; j < isHovered.size(); j++){
if( x > answersBox[i].x && x < (answersBox[i].x + answersBox[i].width) && y > answersBox[i].y && y < (answersBox[i].y + answersBox[i].height)){
if( i == j){
isHovered[j] = true;
cout << "This boolean number: " << j << " has become: " << isHovered[j] << endl;
}else if( i != j){
isHovered[j] = false;
}
}{
cout << " These booleans number: " << j << " have become: " << isHovered[j] << endl;
}
}
}

谢谢!

最佳答案

您不应该只是盲目地将所有 基于索引的循环转变为基于迭代器的循环。正如您所发现的,基于索引的循环有时会更好(例如:更易于阅读、编写、理解和维护)。

特别是下面这段代码:

if( i == j)

是一个很好的指标,表明基于索引的循环对于这个特定问题更好。

如果您真的想尝试使用迭代器,请查看std::distance .使用该函数,您可以将索引比较替换为:

if (std::distance(answersBox.begin(), iter1) == std::distance(isHovered.begin(), iter2)

顺便说一句,else if( i != j) 没有意义,因为条件总是为真。您可以将其替换为简单的 else

关于c++ - 将索引转换为迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25811728/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com