valarray
Initialization
  1. #include <iostream>
  2. #include <valarray>
  3. #include <iterator>
  4.  
  5. template <class T>
  6. void display(T it, T end)
  7. {
  8. while(it != end)
  9. {
  10. std::cout<<*it<<" ";
  11. std::advance(it, 1);
  12. }
  13. std::cout<<std::endl;
  14. }
  15.  
  16. int main(int argc, char *argv[])
  17. {
  18. std::valarray<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  19.  
  20. display(std::begin(v), std::end(v));
  21.  
  22. std::valarray<int> v2(v[std::slice(1, 3, 2)]);
  23.  
  24. display(std::begin(v2), std::end(v2));
  25.  
  26. return 0;
  27. }
Operator
  1. #include <iostream>
  2. #include <valarray>
  3. #include <iterator>
  4.  
  5. template <class T>
  6. void display(T it, T end)
  7. {
  8. while(it != end)
  9. {
  10. std::cout<<*it<<" ";
  11. std::advance(it, 1);
  12. }
  13. std::cout<<std::endl;
  14. }
  15.  
  16. int main(int argc, char *argv[])
  17. {
  18. std::valarray<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  19.  
  20. display(std::begin(v), std::end(v));//1 2 3 4 5 6 7 8 9 10
  21.  
  22. std::valarray<int> v2(v[std::slice(1, 3, 2)]);
  23.  
  24. display(std::begin(v2), std::end(v2));//2 4 6
  25.  
  26. std::valarray<int> v3;
  27. v3 = v*10;
  28. display(std::begin(v3), std::end(v3));//10 20 30 40 50 60 70 80 90 100
  29.  
  30. return 0;
  31. }
Operations
  1. #include <iostream>
  2. #include <valarray>
  3. #include <iterator>
  4.  
  5. template <class T>
  6. T increment(T x)
  7. {
  8. return ++x;
  9. }
  10.  
  11. template <class T>
  12. void display(T it, T end)
  13. {
  14. while(it != end)
  15. {
  16. std::cout<<*it<<" ";
  17. std::advance(it, 1);
  18. }
  19. std::cout<<std::endl;
  20. }
  21.  
  22. int main(int argc, char *argv[])
  23. {
  24. std::valarray<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  25.  
  26. //apply
  27. std::valarray<int> v2 = v.apply(increment);//2 3 4 5 6 7 8 9 10 11
  28.  
  29. //cshift
  30. std::valarray<int> v3 = v.cshift(1);//2 3 4 5 6 7 8 9 10 1
  31.  
  32. //max
  33. std::cout<<"Max: "<<v.max()<<std::endl;
  34.  
  35. //min
  36. std::cout<<"Min: "<<v.min()<<std::endl;
  37.  
  38. //shift
  39. std::valarray<int> v4 = v.shift(2);//3 4 5 6 7 8 9 10 0 0
  40.  
  41. //size
  42. std::cout<<"Size: "<<v4.size()<<std::endl;
  43.  
  44. //sum
  45. std::cout<<"Sum: "<<v.sum()<<std::endl;
  46.  
  47. display(std::begin(v4), std::end(v4));
  48.  
  49. return 0;
  50. }
Arithmetics
  1. #include <iostream>
  2. #include <valarray>
  3. #include <iterator>
  4. #include <cstdlib>
  5.  
  6. template <class T>
  7. void display(T it, T end)
  8. {
  9. while(it != end)
  10. {
  11. std::cout<<*it<<" ";
  12. std::advance(it, 1);
  13. }
  14. std::cout<<std::endl;
  15. }
  16.  
  17. int main(int argc, char *argv[])
  18. {
  19. std::valarray<float> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  20.  
  21. std::valarray<float> cosV = std::cos(v);
  22. display(std::begin(cosV), std::end(cosV));
  23.  
  24. std::valarray<float> sinV = std::sin(v);
  25. display(std::begin(sinV), std::end(sinV));
  26.  
  27. std::valarray<float> logV = std::log(v);
  28. display(std::begin(logV), std::end(logV));
  29.  
  30. std::valarray<float> expV = std::exp(v);
  31. display(std::begin(expV), std::end(expV));
  32.  
  33. return 0;
  34. }
Slice Array
  1. #include <iostream>
  2. #include <valarray>
  3. #include <iterator>
  4. #include <cstdlib>
  5.  
  6. template <class T>
  7. void display(T it, T end)
  8. {
  9. while(it != end)
  10. {
  11. std::cout<<*it<<" ";
  12. std::advance(it, 1);
  13. }
  14. std::cout<<std::endl;
  15. }
  16.  
  17. int main(int argc, char *argv[])
  18. {
  19. std::valarray<float> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  20.  
  21. std::slice s = std::slice(1, 4, 2);
  22. v[s] *= std::valarray<float>(10, 4);
  23.  
  24. display(std::begin(v), std::end(v));
  25.  
  26. return 0;
  27. }
Mask Array
  1. #include <iostream>
  2. #include <valarray>
  3. #include <iterator>
  4. #include <cstdlib>
  5.  
  6. template <class T>
  7. void display(T it, T end)
  8. {
  9. while(it != end)
  10. {
  11. std::cout<<*it<<" ";
  12. std::advance(it, 1);
  13. }
  14. std::cout<<std::endl;
  15. }
  16.  
  17. int main(int argc, char *argv[])
  18. {
  19. std::valarray<float> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  20.  
  21. std::valarray<bool> mask(10);
  22. for(int i = 0; i < 10; i++) mask[i] = (i%2 == 1);
  23.  
  24. v[mask] *= std::valarray<float>(10, 5);
  25. display(std::begin(v), std::end(v));
  26.  
  27. v[!mask] = 0;
  28. display(std::begin(v), std::end(v));
  29.  
  30. return 0;
  31. }
Reference