gpt4 book ai didi

c++ - 如何链接 C++ `transform` 和 `inner_product` 调用?

转载 作者:太空宇宙 更新时间:2023-11-04 13:03:22 25 4
gpt4 key购买 nike

我想做这样的事情:

vector<int> v;
v.push_back(0);
v.push_back(1);

v
.transform([](auto i) { return i + 2; })
.transform([](auto i) { return i * 3; })
.inner_product(0);

换句话说,只是隐式地使用 begin()end() 作为 firstlast迭代器并链接结果。

是否有任何东西(例如某些图书馆)允许这样做?

最佳答案

只需编写您自己的类来增强 std::vector

#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>
#include <utility>

template < typename T >
class augmented_vector
{
std::vector < T > m_vec;
public:
augmented_vector() : m_vec() {}
explicit augmented_vector(std::vector<T> const& in) : m_vec(in) {}

void push_back ( T&& value )
{
m_vec.push_back(std::forward<T>(value));
}

template < typename F >
augmented_vector < T > transform(F const& f)
{
std::vector < T > new_vec(m_vec.size());
std::transform( m_vec.begin(), m_vec.end(), new_vec.begin(), f);
return augmented_vector < T > ( new_vec );
}

T inner_product(T value)
{
return std::inner_product( m_vec.begin(), m_vec.end(), m_vec.begin(), value);
}
};

int main()
{
augmented_vector<int> v;
v.push_back(0);
v.push_back(1);

auto val = v
.transform([](auto i) { return i + 2; })
.transform([](auto i) { return i * 3; })
.inner_product(0);

std::cout << val << '\n';
}

或者使用 D programming language .它有 universal function call syntax .

import std.algorithm : fold, map;
import std.stdio : writeln;

void main()
{
auto v = [0, 1];
auto x = v
.map!(a => a+2)
.map!(a => a*3)
.fold!((a,b) => a + b^^2)(0);
writeln(x);
}

关于c++ - 如何链接 C++ `transform` 和 `inner_product` 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43333104/

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