如何有效地操作满足给定谓词的向量中的所有项目?
How do I efficiently operate on all items in a vector satisfying a given predicate?
对于C++项目,我有一个包含自定义对象的向量,这些对象具有getX()
获取其x值的方法。
我有一个方法需要循环访问属性 x 介于startX
和endX
之间的所有元素。
循环这些项目的正确方法是什么?
目前我有:
int startX = 20;
int endX = 30
for(SomeClass x: someObject->getObjects())
{
if(x->getX() > startX && x->getX() < endX)
{
//do something
}
}
它工作正常,但我记得从C++课的旧课程中,有一种方法可以更有效地循环元素。
我记得是这样的:
int startX = 20;
int endX = 30
for(SomeClass x : find(someObject->getObjects(), x, x->getX() > startX && x->getX() < endX)
{
//do something
}
我只迭代我需要的元素,检查不再在循环内。
编辑: 我将 qt foreach 循环更改为 for 循环,以避免讨论该部分。
您是否正在考虑(前身(std::ranges::filter
?
int startX = 20;
int endX = 30;
auto inrange = [startX, endX](auto x){ return x->getX() > startX && x->getX() < endX; }
for(SomeClass x: std::ranges::filter(someObject->getObjects(), inrange))
{
//do something
}
假设条件x->getX((>startX && x->getX((<endX是正确的,你可以这样做:>
std::vector<Foo> foo = {foo1, foo2, foo3};
std::vector<Foo> bar;
// copy only positive numbers:
std::copy_if (foo.begin(), foo.end(), std::back_inserter(bar), [](Foo x){return x.getX() > startX && x.getX() < endX;} );
相关文章:
- 如何有效地操作满足给定谓词的向量中的所有项目?
- 从加密项目向量中解密任意选择的元素会导致无效的 PKCS #7 块错误
- 如何使用擦除和迭代器来删除二维向量中的项目
- 有没有一种简单的方法可以在C++中获取特定索引之后向量中的所有项目?
- 为什么与<运算符的向量比较会比较每个项目两次?
- 如何将项目放入具有模板化超类类型的向量中
- 有没有更好的方法来检测向量中一个项目的多次出现?
- 总结向量v中的所有项目
- 在包含相同项目的向量中删除一个项目
- 防止向量项目被移动
- 向量中的项目的指针不稳定
- 将矢量中的项目与向量中的所有项目进行比较
- 如何从C 中的对象向量中删除一个项目
- 使用STD ::查找从向量中选择项目
- 将文件读取为由类项目组成的向量
- 检查项目是否已在向量中
- 在给定键 (C++) 的地图向量内查找项目
- 如何在助推向量中查找项目
- 在向量中插入 2 个项目
- 使用 push_back() 在向量中添加项目,向量的大小会增加但无法从向量中读取值