C++标准库-16-数值

原创
10/18 22:47
阅读数 0

C++标准库-16-数值

随机数

C++随机数程序库头文件为<random>

产生随机数的一般用法:

  1. 包含头文件;

  2. 定义随机数引擎;

  3. 定义随机数分布,利用该分布产生随机数;

 // step 1
 #include <random>
 
 // step 2
 std::default_random_engine dre;
 
 // step 3
 std::uniform_int_distribution<int> di(10,20);
 
 //生成随机数
 int rdm_num = di(dre);

所有引擎的初始状态有明确定义,故同样的引擎,初始状态相同。为了产生一个不可预期的值,可以给引擎的构造函数传递一个随机产生的数,即一个seed。

 unsigned int seed = /* a random number */;
 std::default_random_engine dre(seed);

给分布传递的范围参数,是一个半开区间,即[min,max)。

打乱数值序列

通过shuffle算法,可以将一个容器或者区间的元素打乱。

复数complex<>

 //一个示例
 #include <complex>
 #include <iostream>
 
 //重载<<运算符,以常见方式输出复数
 template<typename T>
 std::ostream& operator<<(std::ostream& os,std::complex<T> d)
 {
     os<<d.real()<<"+"<<d.imag()<<"i";
 
     return os;
 }
 
 int main(int argc,char** argv)
 {
     std::complex<double> c1;
     std::cin >> c1;
     std::cout << "Complex :" << c1 << std::endl;
 
     return 0;
 }

通过std::polar(),可以使用极坐标初始化一个复数:

 std::complex<double> c2(std::polar(4.2,0.25));

polar的参数分别为原点距离和弧度。

共轭复数

std::conj(const complex& c),可以返回一个和c共轭的复数,即实部相同、虚部反号的复数。

Valarray

std::valarray<TypeNum>;

A valarray is a representation of the mathematical concept of a linear sequence of values.

valarray是一维的,但是可以通过索引得到多维效果。

valarray的性能较好,适用于实现矢量和矩阵计算。

由于valarray的引入者很早离开了C++标准委员会,valarray的实际使用比较少。

一般概念

头文件:<valarray>

创建valarray

 #include <valarray>
 
 std::valarray<int> va1(10);//创建一个包含10个0的valarray;
 std::valarray<int> va2(1,12);//创建一个包含12个1的valarray;
 std::valarray<int> va3 = {3,4,5,6,7}; // since C++11;

下面的代码创建一个valarray,并进行计算,然后输出valarray。通过运算符重载,定义了输出valarray的格式。

 #include <valarray>
 #include <iostream>
 
 template<typename T>
 std::ostream& operator<<(std::ostream& os,const std::valarray<T>& va)
 {
     os<<"[ ";
     for(int i=0;i<va.size();++i)
     {
         os << va[i] << " ";
     }
     os << "]";
 
     return os;
 }
 
 // std::ostream& operator<<(std::ostream& os,const std::valarray<double>& va)
 // {
 //     os<<"[ ";
 //     for(int i=0;i<va.size();++i)
 //     {
 //         os << va[i] << " ";
 //     }
 //     os << "]";
 
 //     return os;
 // }
 
 int main(int argc,char** argv)
 {
     std::valarray<double> va1 = {3.14,3.2,3.3};
     std::cout << va1 << std::endl;
     std::valarray<double> va2 = 3.0*va1;
     std::cout << va2 << std::endl;
 
     return 0;
 }
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部