gpt4 book ai didi

将函数应用于连续元素的 C++ 算法

转载 作者:IT老高 更新时间:2023-10-28 22:26:42 25 4
gpt4 key购买 nike

有没有更简单的方法来写这个,例如通过使用 STL 或 boost 算法?

std::vector<int> v { 0, 1, 2, 3 }; // any generic STL container
std::vector<int> result;
std::transform(v.begin(), v.end() - 1, // (0, 1, 2)
v.begin() + 1, // (1, 2, 3)
std::back_inserter(result),
[](int a, int b){ return a + b; }); // any binary function
// result == { 1, 3, 5 }

最佳答案

我建议使用 for 循环:

for(std::vector::size_type i = 0; i < v.size() - 1; i++)
result.push_back(v[i] + v[i+1])

一个更通用的双向迭代器循环:

// let begin and end be iterators to corresponding position
// let out be an output iterator
// let fun be a binary function
for (auto it = begin, end_it = std::prev(end); it != end_it; ++it)
*out++ = fun(*it, *std::next(it));

我们可以更进一步,为前向迭代器编写一个循环:

if(begin != end) {
for (auto curr = begin,
nxt = std::next(begin); nxt != end; ++curr, ++nxt) {
*out++ = fun(*curr, *nxt);
}
}

最后,输入迭代器的算法。但是,这要求值类型是可复制的。

if(begin != end) {
auto left = *begin;
for (auto it = std::next(begin); it != end; ++it) {
auto right = *it;
*out++ = fun(left, right);
left = right;
}
}

关于将函数应用于连续元素的 C++ 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37320692/

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