C++中的元素操作

use*_*470 4 c++ arrays fortran gpu vector

是否有一个预先存在的库,可以让我创建具有以下属性的类似数组的对象:

  1. 运行时间大小规范(在即时选择,之后不增长或缩小)
  2. 算重载执行元素方式操作(即c=a+b会导致在载体中cc[i]=a[i]+b[i]所有i,并且类似地为*,-,/,等等)
  3. 例如,x=sqrt(vec)元素行为的一组好的函数将具有元素x[i]=sqrt(vec[i])
  4. 提供"总结"的功能,例如sum(vec),mean(vec)
  5. (可选)可以将操作发送到GPU进行处理.

基本上类似于数组在Fortran中的工作方式,隐藏了所有实现.目前我正在使用vectorSTL并手动重载运算符,但我觉得这可能是一个已解决的问题.

jro*_*rok 17

在标准图书馆的尘土飞扬的角落里,很久以前每个人都忘记了这个角落valarray.查一查,看看它是否符合您的需求.

cppreference.com的手册页:

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, " "));
}
Run Code Online (Sandbox Code Playgroud)

输出: 2 4 6 8 10