gpt4 book ai didi

c++ - 如何使用 find_if 获取最后一个迭代器?

转载 作者:行者123 更新时间:2023-11-30 01:34:09 24 4
gpt4 key购买 nike

我正在尝试在具有 Lambda 表达式的函数中使用 find_if。我想获取 vector 的最后一个迭代器,但我不确定如何编写它。

我可以用这段代码得到第一个迭代器。在这段代码中,struct 有一个索引和分数。代码中的 vector 保存结构,如果索引是五的倍数,则分数比平时高。在此代码中,第一个迭代器的索引为 5,最后一个迭代器的索引为 25。

struct Recorder
{
Recorder(int idx, float score)
{
this->idx = idx;
this->score = score;
}

int idx;
float score;
};

int main(int argc, char** argv)
{

std::vector<std::shared_ptr<Recorder>> recorders;

for (int i = 0; i < 30; ++i)
{
float score = 0.3;
bool isLost = false;
if (i % 5 == 0 && i != 0) score = 0.8;
std::shared_ptr<Recorder> poseRecord = std::make_shared<Recorder>(i, score);
recorders.push_back(poseRecord);
}


auto record = std::find_if(recorders.begin(), recorders.end(),
[](const std::shared_ptr<Recorder>& r) {
return (r->score >= 0.8f);
});


std::cout << "idx : " << (*record)->idx << std::endl;
return 0;
}

如何获取此代码中的最后一次迭代? (此处 (*record)->idx 应为 25)。

最佳答案

您可以使用反向迭代器从另一端开始搜索。此外,正如 Fureeish 和 Ted 在评论中指出的那样,将共享指针作为引用传递给 lambda 函数会更有效。

auto record = std::find_if(recorders.rbegin(), recorders.rend(),
[&](const std::shared_ptr<Recorder> & r) {
return (r->isLost == false && r->score >= 0.8f);
});

关于c++ - 如何使用 find_if 获取最后一个迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56839739/

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