我需要对一些向量求和;也就是说,我想对每个向量的nth元素求和,然后用结果生成一个新的向量。(我已经确保了所有输入向量的大小都相同。)我想用优秀的range-v3库来做这件事。我试过this
// This file is a "Hello, world!" in C++ language by GCC for wandbox.
#include <iostream>
#include <cstdlib>
#include <vector>
#include <cmath>
#include <map>
#include <range/v3/all.hpp>
int main()
{
std::cout << "Hello, Wandbox!" << std::endl;
std::vector< int > v1{ 1,1,1};
std::vector< int> v2{1,1,1};
auto va = ranges::view::zip( v1, v2 )
| ranges::view::transform(
[](auto&& tuple){ return ranges::accumulate( tuple, 0.0 ); }
);
}我得到一个错误,我不能像这样调用ranges::accumulate。我觉得这是一件很简单的事情,我只是不太明白。
请指教
编辑:我在这里问一个后续问题:How to zip vector of vector with range-v3
发布于 2020-05-14 06:01:18
您可以使用std::apply而不是accumulate对元组的值进行求和
auto sum_tuple = [](auto&& tuple) {
return std::apply([](auto... v) {
return (v + ...);
}, tuple );
};
auto va = ranges::views::zip( v1, v2 )
| ranges::views::transform(sum_tuple);这是一个demo。Show是一个包含2个以上向量的示例。
另外,请注意,为了支持ranges::views,ranges::view已被弃用。
https://stackoverflow.com/questions/61785434
复制相似问题