STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Classes | Public Types | Public Member Functions | Public Attributes | Private Member Functions | List of all members
discrete_distribution< _Ty > Class Template Reference

Classes

struct  param_type
 

Public Types

typedef discrete_distribution< _Ty > _Myt
 
typedef vector< double > _Myvec
 
typedef _Ty result_type
 

Public Member Functions

 discrete_distribution ()
 
template<class _InIt >
 discrete_distribution (_InIt _First, _InIt _Last)
 
 discrete_distribution (_XSTD initializer_list< double > _Ilist)
 
template<class _Fn >
 discrete_distribution (size_t _Count, double _Low, double _High, _Fn _Func)
 
 discrete_distribution (const param_type &_Par0)
 
_Myvec probabilities () const
 
param_type param () const
 
void param (const param_type &_Par0)
 
result_type() min () const
 
result_type() max () const
 
void reset ()
 
template<class _Engine >
result_type operator() (_Engine &_Eng) const
 
template<class _Engine >
result_type operator() (_Engine &_Eng, const param_type &_Par0) const
 
template<class _Elem , class _Traits >
basic_istream< _Elem, _Traits > & _Read (basic_istream< _Elem, _Traits > &_Istr, param_type &_Par0)
 
template<class _Elem , class _Traits >
basic_ostream< _Elem, _Traits > & _Write (basic_ostream< _Elem, _Traits > &_Ostr, const param_type &_Par0) const
 

Public Attributes

param_type _Par
 

Private Member Functions

template<class _Engine >
result_type _Eval (_Engine &_Eng, const param_type &_Par0) const
 

Member Typedef Documentation

template<class _Ty = int>
typedef discrete_distribution<_Ty> discrete_distribution< _Ty >::_Myt
template<class _Ty = int>
typedef vector<double> discrete_distribution< _Ty >::_Myvec
template<class _Ty = int>
typedef _Ty discrete_distribution< _Ty >::result_type

Constructor & Destructor Documentation

template<class _Ty = int>
discrete_distribution< _Ty >::discrete_distribution ( )
inline
5628  { // default constructor
5629  }
template<class _Ty = int>
template<class _InIt >
discrete_distribution< _Ty >::discrete_distribution ( _InIt  _First,
_InIt  _Last 
)
inline
5633  : _Par(_First, _Last)
5634  { // construct from [_First, _Last)
5635  }
param_type _Par
Definition: random:5753
_FwdIt _Last
Definition: algorithm:1936
template<class _Ty = int>
discrete_distribution< _Ty >::discrete_distribution ( _XSTD initializer_list< double >  _Ilist)
inline
5638  : _Par(_Ilist)
5639  { // construct from initializer list
5640  }
param_type _Par
Definition: random:5753
template<class _Ty = int>
template<class _Fn >
discrete_distribution< _Ty >::discrete_distribution ( size_t  _Count,
double  _Low,
double  _High,
_Fn  _Func 
)
inline
5645  : _Par(_Count, _Low, _High, _Func)
5646  { // construct from function
5647  }
unsigned int _Count
Definition: xcomplex:668
param_type _Par
Definition: random:5753
template<class _Ty = int>
discrete_distribution< _Ty >::discrete_distribution ( const param_type _Par0)
inlineexplicit
5650  : _Par(_Par0)
5651  { // construct from parameter package
5652  }
param_type _Par
Definition: random:5753

Member Function Documentation

template<class _Ty = int>
template<class _Engine >
result_type discrete_distribution< _Ty >::_Eval ( _Engine &  _Eng,
const param_type _Par0 
) const
inlineprivate
5731  { // return next value
5732  double _Px = _NRAND(_Eng, double);
5733  result_type _Count = (result_type)_Par0._Pcdf.size();
5734  result_type _First = 0;
5735 
5736  while (0 < _Count)
5737  { // divide and conquer, find half that contains answer
5738  result_type _Count2 = _Count / 2;
5739  result_type _Mid = _First + _Count2;
5740 
5741  if (_Px <= _Par0._Pcdf[_Mid])
5742  _Count = _Count2; // answer in first half, stay there
5743  else
5744  { // answer in second half, move up
5745  _First = ++_Mid;
5746  _Count -= _Count2 + 1;
5747  }
5748  }
5749  return (_First);
5750  }
unsigned int _Count
Definition: xcomplex:668
#define _NRAND(eng, resty)
Definition: random:323
_Ty result_type
Definition: random:5528
template<class _Ty = int>
template<class _Elem , class _Traits >
basic_istream<_Elem, _Traits>& discrete_distribution< _Ty >::_Read ( basic_istream< _Elem, _Traits > &  _Istr,
param_type _Par0 
)
inline
5700  { // read state from _Istr
5701  size_t _Nvals;
5702  _Istr >> _Nvals;
5703  _Par0._Pvec.clear();
5704  for (; 0 < _Nvals; --_Nvals)
5705  { // get a value and add to vector
5706  double _Val;
5707  _In(_Istr, _Val);
5708  _Par0._Pvec.push_back(_Val);
5709  }
5710  _Par0._Init(false); // don't renormalize, just compute CDF
5711  return (_Istr);
5712  }
_In_ int _Val
Definition: vcruntime_string.h:62
void __CLR_OR_THIS_CALL clear(iostate _State=goodbit, bool _Reraise=false)
Definition: ios:42
basic_istream< _Elem, _Traits > & _In(basic_istream< _Elem, _Traits > &_Is, _Ty &_Dx)
Definition: random:133
template<class _Ty = int>
template<class _Elem , class _Traits >
basic_ostream<_Elem, _Traits>& discrete_distribution< _Ty >::_Write ( basic_ostream< _Elem, _Traits > &  _Ostr,
const param_type _Par0 
) const
inline
5719  { // write state to _Ostr
5720  size_t _Nvals = _Par0._Pvec.size();
5721  _Ostr << ' ' << _Nvals;
5722 
5723  for (size_t _Idx = 0; _Idx < _Par0._Pvec.size(); ++_Idx)
5724  _Out(_Ostr, _Par0._Pvec[_Idx]);
5725  return (_Ostr);
5726  }
basic_ostream< _Elem, _Traits > & _Out(basic_ostream< _Elem, _Traits > &_Os, _Ty _Dx)
Definition: random:151
template<class _Ty = int>
result_type() discrete_distribution< _Ty >::max ( ) const
inline
5675  { // return maximum possible generated value
5676  return ((result_type)(_Par._Pvec.size() - 1));
5677  }
param_type _Par
Definition: random:5753
size_type size() const _NOEXCEPT
Definition: vector:1178
_Ty result_type
Definition: random:5528
_Myvec _Pvec
Definition: random:5623
template<class _Ty = int>
result_type() discrete_distribution< _Ty >::min ( ) const
inline
5670  { // return minimum possible generated value
5671  return (0);
5672  }
template<class _Ty = int>
template<class _Engine >
result_type discrete_distribution< _Ty >::operator() ( _Engine &  _Eng) const
inline
5685  { // return next value
5686  return (_Eval(_Eng, _Par));
5687  }
param_type _Par
Definition: random:5753
result_type _Eval(_Engine &_Eng, const param_type &_Par0) const
Definition: random:5730
template<class _Ty = int>
template<class _Engine >
result_type discrete_distribution< _Ty >::operator() ( _Engine &  _Eng,
const param_type _Par0 
) const
inline
5691  { // return next value, given parameter package
5692  return (_Eval(_Eng, _Par0));
5693  }
result_type _Eval(_Engine &_Eng, const param_type &_Par0) const
Definition: random:5730
template<class _Ty = int>
param_type discrete_distribution< _Ty >::param ( ) const
inline
5660  { // return parameter package
5661  return (_Par);
5662  }
param_type _Par
Definition: random:5753
template<class _Ty = int>
void discrete_distribution< _Ty >::param ( const param_type _Par0)
inline
5665  { // set parameter package
5666  _Par = _Par0;
5667  }
param_type _Par
Definition: random:5753
template<class _Ty = int>
_Myvec discrete_distribution< _Ty >::probabilities ( ) const
inline
5655  { // return scaled probabilities vector
5656  return (_Par.probabilities());
5657  }
_Myvec probabilities() const
Definition: random:5586
param_type _Par
Definition: random:5753
template<class _Ty = int>
void discrete_distribution< _Ty >::reset ( )
inline
5680  { // clear internal state
5681  }

Member Data Documentation

template<class _Ty = int>
param_type discrete_distribution< _Ty >::_Par

The documentation for this class was generated from the following file: