gpt4 book ai didi

c++ - 类似于 transform 的 STL 算法,允许访问先前转换的元素,类似于 accumulate

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

是否有一种 STL 算法允许我将一个函数应用于一个范围内的每个元素,转换元素,并将之前转换的元素作为输入?

我在想这样的事情(显然行不通,因为第二个迭代器将无效):

struct Input
{
int width;
};

struct Output
{
int x;
int width;
};

Output transform_input(const Input &input, const Output &previous)
{
return { previous.x + previous.width, input.width };
}

int main()
{
std::vector<Input> input = { { 30 }, { 60 }, { 10 } };
std::vector<Output> output;

std::transform(std::begin(input)
, std::end(input)
, std::prev(std::begin(output))
, std::back_inserter(output)
, transform_input
);
}

这里的预期结果是output包含3个Output类型的元素,内容如下:

  • 元素 0,其中 x == 0width == 30
  • 元素 1,其中 x == 30width == 60
  • 元素 2,其中 x == 90width == 10

为了让它起作用,我想算法必须允许我指定一个种子,或者默认为我构造一个种子。

我已经看过transformadjacent_difference

使用 transform 可能适用于某种自定义迭代器,或者可能有一个内置的 STL 可供我使用?

虽然 adjacent_difference 看起来很有希望,但它只会让我访问输入迭代器的前一个元素。

如果没有满足我要求的内置算法,那么这种算法叫什么?

最佳答案

您可以使用 std::transform 并传递捕获输出容器的 lambda。

std::transform(std::begin(input)
, std::end(input)
, std::back_inserter(output)
, [&](auto& input) {
if (output.empty()) {
return transform_input(input, {});
} else {
return transform_input(input, output.back());
}
);

关于c++ - 类似于 transform 的 STL 算法,允许访问先前转换的元素,类似于 accumulate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56090937/

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