【C++】std::valarray

valarray对象被设计用来保存一个值数组,并且可以轻松地对它们执行数学运算。

(1)构造

valarray<int> val(4);//0,0,0,0

valarray<int>va2(3,4);//3,3,3,3

int ia[]={1,2,3,4,5,6};
valarray<int> va3(ia,sizeof(ia)/sizeof(ia[0]));

valarray<int>va4(ia+1,4);//2,3,4,5

valarray<int>va5(va4);//2,3,4,5

valarray<int>va6(va3[std::slice(1,3,2)]);//2,4,6	std::slice是 C++ 标准库中用于操作 valarray 数据类型的工具类。从num1开始,选择num2个数字,间隔为num3

(2)成员函数

T min() const;//返回最小值

T max() const;//返回最大值

T sum() const;//返回valarray中所有元素的总和

size_t size() const;//返回valarray中的元素数

void resize (size_t sz, T c = T());//调整valarray的大小,将其大小更改为sz元素,并将值c分配给每个元素。调整大小后,前面的内容将丢失

void swap (valarray& x) noexcept;//交换*this和x的内容

valarray shift (int n) const;//返回valarray对象的副本,其元素左移n个空格(如果n为负数,则向右移动)
 	 int init[]={10,20,30,40,50};
 	 std::valarray<int> myvalarray (init,5);   // 10 20 30 40 50
  	 myvalarray = myvalarray.shift(2);         // 30 40 50  0  0
 	 myvalarray = myvalarray.shift(-1);        // 0  30 40 50  0


// n:要旋转的元素数。如果为正,则向左旋转。如果为负数,则向右旋转。
valarray cshift (int n) const;

//返回一个valarray,其中每个元素为传入func后进行处理的返回值
valarray apply (T func(T)) const;
valarray apply (T func(const T&)) const;

begin();//起始迭代器
end();//末尾迭代器

(3)运算符

+
-
*
/
%
^
>
<
==
!=
&&
||
!
//valarray和T进行运算,则每个元素都和T执行这个运算
//valarray和valarray进行运算,则对应元素执行这个运算
int init[] = { 10,20,30,40 };
//     foo:           bar:

std::valarray<int> foo(init, 4);   //  10 20 30 40
std::valarray<int> bar(25, 4);     //  25 25 25 25

bar += foo;                        //  35 45 55 65

foo = bar + 10;                    //  45 55 65 75    

foo -= 10;                         //  35 45 55 65    

std::valarray<bool> comp = (foo == bar);//每个元素都判定是否相等

if (comp.min() == true)
	std::cout << "foo and bar are equal.\n";
else
	std::cout << "foo and bar are not equal.\n";
posted @ 2025-07-17 17:18  仰望星河Leon  阅读(17)  评论(0)    收藏  举报