24 Mayıs 2019 Cuma

std::valarray

Giriş
Şu satırı dahil ederiz.
#include <valarray>
İşlemi tüm diziye uygular. Açıklaması şöyle.
std::valarray and helper classes are defined to be free of certain forms of aliasing, thus allowing operations on these classes to be optimized similar to the effect of the keyword restrict in the C programming language. In addition, functions and operators that take valarray arguments are allowed to return proxy objects to make it possible for the compiler to optimize an expression such as v1 = a * v2 + v3; as a single loop that executes v1[i] = a * v2[i] + v3[i]; avoiding any temporaries or multiple passes.
Constructor
Şöyle yaparız.
const int N = 100000000;
std::valarray<float> a(1, N);
operator [] metodu
Şöyle yaparız.
const int N = 100000000;
std::valarray<float> a(1, N);
std::valarray<float> c(2, N);
std::valarray<float> b(3, N);
std::valarray<float> d(N);


for (int i = 0; i < N; i++)
  d[i] = a[i] + b[i] * c[i];
operator + metodu
İmzası şöyle. İki std::valarray nesnesini toplar
template<class _Ty> inline
valarray<_Ty> operator+(const valarray<_Ty>& _Left,
                        const valarray<_Ty>& _Right);
operator - metodu
İki std::valarray nesnesini çıkarır.

Örnek
Şöyle yaparız.
std::valarray<int> a{ 1, 2 }, b{ 2, 4 }, c;
c = a - b; // c is {-1,-2}
a += b; // a is {3,6}
a -= b; // a is {1,2} again
a += {2, 4}; // a is {3,6} again
operator * metodu
Örnek
Şu kod derlenmez.
valarray<int> v { 1, 2, 3 };

for (auto x : v) { (void)x; } // Ok

auto w = v * 2;     // Leads to failure in range based loop below
Şöyle yaparız.
std::valarray<int> w = v * 2;
Örnek
Şöyle yaparız.
const int N = 100000000;
std::valarray<float> a(1, N);
std::valarray<float> c(2, N);
std::valarray<float> b(3, N);
std::valarray<float> d(N);

d = a + b * c;
operator / metodu
std::valarray nesnesini bir değer ile böler.

Örnek
Şöyle kullanırız.
#include <iostream>
#include <valarray>
using namespace std;

int main() {
  valarray<double> arr({5,10,15,20,25});
  auto v = arr[0];
  arr=arr/v;

  for(int value:arr)cout << value << ' ';
  return 0;
}
Çıktı olarak şunu alırız.
1 2 3 4 5
size metodu
Şöyle yaparız.
void check(std::valarray<float>& a)
{
  for (int i = 0; i < a.size(); i++)
    if (a[i] != 7)
      std::cout << "Error" << std::endl;
}