gpt4 book ai didi

c++ - 修改容器的对/邻居

转载 作者:搜寻专家 更新时间:2023-10-31 01:44:28 28 4
gpt4 key购买 nike

我遇到了一个问题,我需要根据存储在前一个元素中的信息修改容器的元素。示例:


如果前一个 vector 元素可被 2 整除,则将当前元素乘以 10
vector -> [12, 11, 33, 10]

我试图找到可以很好地包装此操作的算法,但找不到。我想出了一个主意,但我不太喜欢这个解决方案。


检查 vector 的大小是否大于 1
auto last_element_it = vec.end();
--last_element_it;
for (auto it = vec.begin(); it != last_element_it;++it)
{
自动 next_element_it = 它;
++下一个元素它;
//用它和 next_element_it 做任何我想做的事
}

有没有更简单和/或更漂亮的方法来做到这一点?

@编辑例子中的整数只是为了简化这个问题。在我的实际问题中,我的容器中有类对象。

最佳答案

您可以使用算法 std::adjacent_find为每个相邻对执行一个操作。如果范围为空或仅包含单个元素,则不会发生任何事情。

std::adjacent_find(vec.begin(), vec.end(), [&](const auto& lhs, const auto& rhs) {
// do something with pair of adjacent elements
foobar(lhs, rhs);
return false;
});

操作总是返回 false ,因为 std::adjacent_find将在操作返回的第一对上停止 true .


根据 C++ 标准,不允许在取消引用的迭代器上调用非常量函数。但是,您可以编写自己的 std::adjacent_find 版本没有这些限制:

template <class ForwardIt, typename BinaryPredicate>
void for_each_adjacent(ForwardIt first, ForwardIt last, BinaryPredicate p)
{
if (first == last) {
// nothing
} else {
for (ForwardIt next = std::next(first); next != last; ++next, ++first) {
p(*first, *next);
}
}
}

关于c++ - 修改容器的对/邻居,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23479155/

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