• valarray数值库学习


    c++标准库表数组形式的类有三个:array:固定长度,目的为代替内置数组如: int a[5] = {1,3,5,7,9};vector:支持变长度的类, valarray:是表示并操作值数组的类,面向数值计算设计,支持对元素进行数学运算,并且支持多种形式的广义下标运算符、切片及间接访问。
    下面我们来看valarray的使用示例:

    成员函数

    (构造函数)

    构造新的数值数组
    (公开成员函数)

    (析构函数)

    析构数值数组
    (公开成员函数)

    operator=

    为内容赋值
    (公开成员函数)

    operator[]

    获取/设置 valarray 数组元素、切片或掩码
    (公开成员函数)

    operator+
    operator-
    operator~
    operator!

    对 valarray 的每个元素运用一元算术运算符
    (公开成员函数)

    operator+=
    operator-=
    operator*=
    operator/=
    operator%=
    operator&=
    operator|=
    operator^=
    operator<<=
    operator>>=

    对 valarray 的每个元素应用复合赋值运算符
    (公开成员函数)

    swap

    与另一 valarray 交换
    (公开成员函数)

    size

    返回valarray的大小
    (公开成员函数)

    resize

    更改 valarray 的大小
    (公开成员函数)

    sum

    计算所有元素的和
    (公开成员函数)

    min

    返回最小元素
    (公开成员函数)

    max

    返回最大的元素
    (公开成员函数)

    shift

    以填入零的方式移动 valarray 的元素
    (公开成员函数)

    cshift

    循环移动 valarray 的元素
    (公开成员函数)

    apply

    对 valarray 的每个元素应用函数
    (公开成员函数)

    1.valarray初始化

    1. #include
    2. #include
    3. using namespace std;
    4. //输出valarray
    5. template <typename T>
    6. void outValarray(const valarray& val)
    7. {
    8. for(auto v: val)
    9. cout << v << "\t";
    10. cout << endl;
    11. }
    12. int main()
    13. {
    14. //1.创建一个大小为5的valarray
    15. valarray<int> val(5);
    16. outValarray(val);
    17. //2.使用列表{1,3,5,7,9}初始化一个valarray
    18. valarray<int> val2 = {1,3,5,7,9};
    19. outValarray(val2);
    20. //3.创建一个大小为5,值全为7的valarray
    21. valarray<int> val3(7, 5);
    22. outValarray(val3);
    23. //4.使用数组初始化valarray
    24. int ia[] = {10,20,30,40,50};
    25. valarray<int> val4(ia, sizeof(ia)/sizeof(ia[0]));
    26. outValarray(val4);
    27. //5.使用数组创建大小为3的valarray
    28. valarray<int> val5(ia + 2, 3);
    29. outValarray(val5);
    30. //6.使用valarray进行数学运算
    31. val = (val2 + val4)*val4;
    32. outValarray(val);
    33. cout << "Hello World!" << endl;
    34. return 0;
    35. }

    运行结果:

    2.valarray一元算术运算:

    1. #include
    2. #include
    3. using namespace std;
    4. //输出valarray
    5. template <typename T>
    6. void outValarray(const valarray& val)
    7. {
    8. for(auto v: val)
    9. cout << v << "\t";
    10. cout << endl;
    11. }
    12. int main()
    13. {
    14. //1.operator+运算,给每个元素+11
    15. valarray<int> val = {1,3,5,7,9};
    16. outValarray(val);
    17. val = val + 11;
    18. outValarray(val);
    19. //2.operator-运算,给每个元素-5
    20. val = val - 5;
    21. outValarray(val);
    22. //3.operator~运算,给每个元素~
    23. val = ~val;
    24. outValarray(val);
    25. //4.operator !运算,给每个元素!
    26. outValarray(!val);
    27. cout << "Hello World!" << endl;
    28. return 0;
    29. }

    运行结果:

     3.对valarray的每个元素应用复合赋值运算符

    1. #include
    2. #include
    3. using namespace std;
    4. //输出valarray
    5. template <typename T>
    6. void outValarray(const valarray& val)
    7. {
    8. for(auto v: val)
    9. cout << v << "\t";
    10. cout << endl;
    11. }
    12. int main()
    13. {
    14. //1. operator+=运算
    15. valarray<int> val = {1,3,5,7,9};
    16. outValarray(val);
    17. val += 11;
    18. outValarray(val);
    19. //2. operator-=运算
    20. val -= 2;
    21. outValarray(val);
    22. //3. operator*=运算
    23. val *= 3;
    24. outValarray(val);
    25. //4. operator/=运算
    26. val /= 2;
    27. outValarray(val);
    28. //5. operator%=运算
    29. val %= 5;
    30. outValarray(val);
    31. //6. operator&=运算
    32. val &= 5;
    33. outValarray(val);
    34. //7. operator|=运算
    35. val |= 1;
    36. outValarray(val);
    37. //8. operator^=运算
    38. val ^= 2;
    39. outValarray(val);
    40. //9. operator<<=运算
    41. val <<= 2;
    42. outValarray(val);
    43. //10. operator>>=运算
    44. val >>= 1;
    45. outValarray(val);
    46. cout << "Hello World!" << endl;
    47. return 0;
    48. }

    运算结果:

     4.成员函数使用示例:

    1. #include
    2. #include
    3. using namespace std;
    4. //输出valarray
    5. template <typename T>
    6. void outValarray(const valarray& val)
    7. {
    8. for(auto v: val)
    9. cout << v << "\t";
    10. cout << endl;
    11. }
    12. int main()
    13. {
    14. //1.swap 与另一 valarray 交换
    15. valarray<int> val0 = {1,3,5,7,9};
    16. valarray<int> val1 = {11,31,51,71,91};
    17. outValarray(val0);
    18. outValarray(val1);
    19. val0.swap(val1);
    20. cout << endl;
    21. outValarray(val0);
    22. outValarray(val1);
    23. cout << endl;
    24. //2.size返回valarray的大小
    25. valarray<int> val2 = {1,3,5,7,9,11,13,15};
    26. cout << "val2.size===== " << val2.size() << endl;
    27. cout << endl;
    28. //3.resize 更改 valarray 的大小
    29. valarray<int> val3 = {1,3,5};
    30. outValarray(val3);
    31. val3.resize(5);
    32. outValarray(val3);
    33. val3.resize(6, 10);
    34. outValarray(val3);
    35. cout << endl;
    36. //4.sum 计算所有元素的和
    37. valarray<int> val = {13,33,59,72,95,11,13,15};
    38. outValarray(val);
    39. cout << "val.sum===== " << val.sum() << endl;
    40. cout << endl;
    41. //5.min返回最小元素
    42. cout << "val.min===== " << val.min() << endl;
    43. cout << endl;
    44. //6.max返回最大的元素
    45. cout << "val.max===== " << val.max() << endl;
    46. cout << endl;
    47. //7.shift 以填入零的方式移动 valarray 的元素
    48. valarray<int> val4 = {13,33,59,72,95,11,15};
    49. outValarray(val4);
    50. valarray<int> val5 = val4.shift(3);
    51. outValarray(val5);
    52. cout << endl;
    53. //8.cshift 循环移动 valarray 的元素
    54. valarray<int> val6 = {13,33,59,72,95,11,15};
    55. outValarray(val6);
    56. valarray<int> val7 = val6.cshift(3);
    57. outValarray(val7);
    58. cout << endl;
    59. //9.apply对 valarray 的每个元素应用函数
    60. valarray<int> val8 = {3,32,59,72,95,11,15};
    61. outValarray(val8);
    62. val8 = val8.apply([](int n)->int{return n*2;});
    63. outValarray(val8);
    64. cout << "Hello World!" << endl;
    65. return 0;
    66. }

    运行结果:

    参考:

    标准库头文件 - cppreference.com

  • 相关阅读:
    数据结构与算法3-栈
    八、【快速选择工具组】
    MySQL面试题 硬核47问
    【微信小程序】如何获得自己当前的定位呢?本文利用逆地址解析、uni-app带你实现
    酒水销售系统
    MySQL 数据库设计范式
    Flowable工作流
    Elasticsearch索引中数据的增删改查与并发控制
    QGIS最受欢迎的20个插件
    人机交互设备(HID)
  • 原文地址:https://blog.csdn.net/chenyijun/article/details/125822344