是否有一个预先存在的库可以让我创建具有以下属性的类似数组的对象:
- 运行时大小规范(在实例时选择,之后不会增长或缩小)
- 运算符重载以执行元素明智的操作(即
c=a+b
将产生一个向量c
with c[i]=a[i]+b[i]
对全部i
,类似地对于*
, -
, /
, etc)
- 例如,一组按元素起作用的良好函数
x=sqrt(vec)
会有元素x[i]=sqrt(vec[i])
- 提供“汇总”功能,例如
sum(vec)
, mean(vec)
etc
- (可选)操作可以发送到 GPU 进行处理。
基本上类似于 Fortran 中数组的工作方式,但所有实现都被隐藏。目前我正在使用vector
从 STL 并手动重载运算符,但我觉得这可能是一个已解决的问题。
在标准库的尘土飞扬的角落里,有一个类,这个类早已被大家遗忘了。valarray
。查看一下,看看它是否适合您的需求。
From cppreference.com 上的手册页 http://en.cppreference.com/w/cpp/numeric/valarray:
std::valarray
是用于表示和操作值数组的类。它支持逐元素数学运算和各种形式的广义下标运算符、切片和间接访问。
用于说明的代码片段:
#include <valarray>
#include <algorithm>
#include <iterator>
#include <iostream>
int main()
{
std::valarray<int> a { 1, 2, 3, 4, 5};
std::valarray<int> b = a;
std::valarray<int> c = a + b;
std::copy(begin(c), end(c),
std::ostream_iterator<int>(std::cout, " "));
}
Output: 2 4 6 8 10
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)