c++标准库表数组形式的类有三个:array:固定长度,目的为代替内置数组如: int a[5] = {1,3,5,7,9};vector:支持变长度的类, valarray:是表示并操作值数组的类,面向数值计算设计,支持对元素进行数学运算,并且支持多种形式的广义下标运算符、切片及间接访问。
下面我们来看valarray的使用示例:
成员函数
构造新的数值数组 (公开成员函数) | |
析构数值数组 (公开成员函数) | |
为内容赋值 (公开成员函数) | |
获取/设置 valarray 数组元素、切片或掩码 (公开成员函数) | |
对 valarray 的每个元素运用一元算术运算符 (公开成员函数) | |
对 valarray 的每个元素应用复合赋值运算符 (公开成员函数) | |
与另一 valarray 交换 (公开成员函数) | |
返回valarray的大小 (公开成员函数) | |
更改 valarray 的大小 (公开成员函数) | |
计算所有元素的和 (公开成员函数) | |
返回最小元素 (公开成员函数) | |
返回最大的元素 (公开成员函数) | |
以填入零的方式移动 valarray 的元素 (公开成员函数) | |
循环移动 valarray 的元素 (公开成员函数) | |
对 valarray 的每个元素应用函数 (公开成员函数) |
1.valarray初始化
#include <iostream>
#include <valarray>
using namespace std;
//输出valarray
template <typename T>
void outValarray(const valarray<T>& val)
{
for(auto v: val)
cout << v << "\t";
cout << endl;
}
int main()
{
//1.创建一个大小为5的valarray
valarray<int> val(5);
outValarray(val);
//2.使用列表{1,3,5,7,9}初始化一个valarray
valarray<int> val2 = {1,3,5,7,9};
outValarray(val2);
//3.创建一个大小为5,值全为7的valarray
valarray<int> val3(7, 5);
outValarray(val3);
//4.使用数组初始化valarray
int ia[] = {10,20,30,40,50};
valarray<int> val4(ia, sizeof(ia)/sizeof(ia[0]));
outValarray(val4);
//5.使用数组创建大小为3的valarray
valarray<int> val5(ia + 2, 3);
outValarray(val5);
//6.使用valarray进行数学运算
val = (val2 + val4)*val4;
outValarray(val);
cout << "Hello World!" << endl;
return 0;
}
运行结果:
2.valarray一元算术运算:
#include <iostream>
#include <valarray>
using namespace std;
//输出valarray
template <typename T>
void outValarray(const valarray<T>& val)
{
for(auto v: val)
cout << v << "\t";
cout << endl;
}
int main()
{
//1.operator+运算,给每个元素+11
valarray<int> val = {1,3,5,7,9};
outValarray(val);
val = val + 11;
outValarray(val);
//2.operator-运算,给每个元素-5
val = val - 5;
outValarray(val);
//3.operator~运算,给每个元素~
val = ~val;
outValarray(val);
//4.operator !运算,给每个元素!
outValarray(!val);
cout << "Hello World!" << endl;
return 0;
}
运行结果:
3.对valarray的每个元素应用复合赋值运算符:
#include <iostream>
#include <valarray>
using namespace std;
//输出valarray
template <typename T>
void outValarray(const valarray<T>& val)
{
for(auto v: val)
cout << v << "\t";
cout << endl;
}
int main()
{
//1. operator+=运算
valarray<int> val = {1,3,5,7,9};
outValarray(val);
val += 11;
outValarray(val);
//2. operator-=运算
val -= 2;
outValarray(val);
//3. operator*=运算
val *= 3;
outValarray(val);
//4. operator/=运算
val /= 2;
outValarray(val);
//5. operator%=运算
val %= 5;
outValarray(val);
//6. operator&=运算
val &= 5;
outValarray(val);
//7. operator|=运算
val |= 1;
outValarray(val);
//8. operator^=运算
val ^= 2;
outValarray(val);
//9. operator<<=运算
val <<= 2;
outValarray(val);
//10. operator>>=运算
val >>= 1;
outValarray(val);
cout << "Hello World!" << endl;
return 0;
}
运算结果:
4.成员函数使用示例:
#include <iostream>
#include <valarray>
using namespace std;
//输出valarray
template <typename T>
void outValarray(const valarray<T>& val)
{
for(auto v: val)
cout << v << "\t";
cout << endl;
}
int main()
{
//1.swap 与另一 valarray 交换
valarray<int> val0 = {1,3,5,7,9};
valarray<int> val1 = {11,31,51,71,91};
outValarray(val0);
outValarray(val1);
val0.swap(val1);
cout << endl;
outValarray(val0);
outValarray(val1);
cout << endl;
//2.size返回valarray的大小
valarray<int> val2 = {1,3,5,7,9,11,13,15};
cout << "val2.size===== " << val2.size() << endl;
cout << endl;
//3.resize 更改 valarray 的大小
valarray<int> val3 = {1,3,5};
outValarray(val3);
val3.resize(5);
outValarray(val3);
val3.resize(6, 10);
outValarray(val3);
cout << endl;
//4.sum 计算所有元素的和
valarray<int> val = {13,33,59,72,95,11,13,15};
outValarray(val);
cout << "val.sum===== " << val.sum() << endl;
cout << endl;
//5.min返回最小元素
cout << "val.min===== " << val.min() << endl;
cout << endl;
//6.max返回最大的元素
cout << "val.max===== " << val.max() << endl;
cout << endl;
//7.shift 以填入零的方式移动 valarray 的元素
valarray<int> val4 = {13,33,59,72,95,11,15};
outValarray(val4);
valarray<int> val5 = val4.shift(3);
outValarray(val5);
cout << endl;
//8.cshift 循环移动 valarray 的元素
valarray<int> val6 = {13,33,59,72,95,11,15};
outValarray(val6);
valarray<int> val7 = val6.cshift(3);
outValarray(val7);
cout << endl;
//9.apply对 valarray 的每个元素应用函数
valarray<int> val8 = {3,32,59,72,95,11,15};
outValarray(val8);
val8 = val8.apply([](int n)->int{return n*2;});
outValarray(val8);
cout << "Hello World!" << endl;
return 0;
}
运行结果:
参考: