valarray
Initialization
- #include <iostream>
- #include <valarray>
- #include <iterator>
-
- template <class T>
- void display(T it, T end)
- {
- while(it != end)
- {
- std::cout<<*it<<" ";
- std::advance(it, 1);
- }
- std::cout<<std::endl;
- }
-
- int main(int argc, char *argv[])
- {
- std::valarray<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-
- display(std::begin(v), std::end(v));
-
- std::valarray<int> v2(v[std::slice(1, 3, 2)]);
-
- display(std::begin(v2), std::end(v2));
-
- return 0;
- }
-
Operator
- #include <iostream>
- #include <valarray>
- #include <iterator>
-
- template <class T>
- void display(T it, T end)
- {
- while(it != end)
- {
- std::cout<<*it<<" ";
- std::advance(it, 1);
- }
- std::cout<<std::endl;
- }
-
- int main(int argc, char *argv[])
- {
- std::valarray<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-
- display(std::begin(v), std::end(v));//1 2 3 4 5 6 7 8 9 10
-
- std::valarray<int> v2(v[std::slice(1, 3, 2)]);
-
- display(std::begin(v2), std::end(v2));//2 4 6
-
- std::valarray<int> v3;
- v3 = v*10;
- display(std::begin(v3), std::end(v3));//10 20 30 40 50 60 70 80 90 100
-
- return 0;
- }
-
Operations
- #include <iostream>
- #include <valarray>
- #include <iterator>
-
- template <class T>
- T increment(T x)
- {
- return ++x;
- }
-
- template <class T>
- void display(T it, T end)
- {
- while(it != end)
- {
- std::cout<<*it<<" ";
- std::advance(it, 1);
- }
- std::cout<<std::endl;
- }
-
- int main(int argc, char *argv[])
- {
- std::valarray<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-
- //apply
- std::valarray<int> v2 = v.apply(increment);//2 3 4 5 6 7 8 9 10 11
-
- //cshift
- std::valarray<int> v3 = v.cshift(1);//2 3 4 5 6 7 8 9 10 1
-
- //max
- std::cout<<"Max: "<<v.max()<<std::endl;
-
- //min
- std::cout<<"Min: "<<v.min()<<std::endl;
-
- //shift
- std::valarray<int> v4 = v.shift(2);//3 4 5 6 7 8 9 10 0 0
-
- //size
- std::cout<<"Size: "<<v4.size()<<std::endl;
-
- //sum
- std::cout<<"Sum: "<<v.sum()<<std::endl;
-
- display(std::begin(v4), std::end(v4));
-
- return 0;
- }
-
Arithmetics
- #include <iostream>
- #include <valarray>
- #include <iterator>
- #include <cstdlib>
-
- template <class T>
- void display(T it, T end)
- {
- while(it != end)
- {
- std::cout<<*it<<" ";
- std::advance(it, 1);
- }
- std::cout<<std::endl;
- }
-
- int main(int argc, char *argv[])
- {
- std::valarray<float> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-
- std::valarray<float> cosV = std::cos(v);
- display(std::begin(cosV), std::end(cosV));
-
- std::valarray<float> sinV = std::sin(v);
- display(std::begin(sinV), std::end(sinV));
-
- std::valarray<float> logV = std::log(v);
- display(std::begin(logV), std::end(logV));
-
- std::valarray<float> expV = std::exp(v);
- display(std::begin(expV), std::end(expV));
-
- return 0;
- }
-
Slice Array
- #include <iostream>
- #include <valarray>
- #include <iterator>
- #include <cstdlib>
-
- template <class T>
- void display(T it, T end)
- {
- while(it != end)
- {
- std::cout<<*it<<" ";
- std::advance(it, 1);
- }
- std::cout<<std::endl;
- }
-
- int main(int argc, char *argv[])
- {
- std::valarray<float> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-
- std::slice s = std::slice(1, 4, 2);
- v[s] *= std::valarray<float>(10, 4);
-
- display(std::begin(v), std::end(v));
-
- return 0;
- }
-
Mask Array
- #include <iostream>
- #include <valarray>
- #include <iterator>
- #include <cstdlib>
-
- template <class T>
- void display(T it, T end)
- {
- while(it != end)
- {
- std::cout<<*it<<" ";
- std::advance(it, 1);
- }
- std::cout<<std::endl;
- }
-
- int main(int argc, char *argv[])
- {
- std::valarray<float> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-
- std::valarray<bool> mask(10);
- for(int i = 0; i < 10; i++) mask[i] = (i%2 == 1);
-
- v[mask] *= std::valarray<float>(10, 5);
- display(std::begin(v), std::end(v));
-
- v[!mask] = 0;
- display(std::begin(v), std::end(v));
-
- return 0;
- }
-
Reference