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



