C++ valarray 操作符 函数模板

  • 定义和用法

    成员函数
    valarray operator+() const;
    valarray operator-() const;
    valarray operator~() const;
    valarray<bool> operator!() const;
    
    valarray& operator*= (const valarray& rhs);
    valarray& operator/= (const valarray& rhs);
    valarray& operator%= (const valarray& rhs);
    valarray& operator+= (const valarray& rhs);
    valarray& operator-= (const valarray& rhs);
    valarray& operator^= (const valarray& rhs);
    valarray& operator&= (const valarray& rhs);
    valarray& operator|= (const valarray& rhs);
    valarray& operator<<= (const valarray& rhs);
    valarray& operator>>= (const valarray& rhs);
    
    valarray& operator*= (const T& val);
    valarray& operator/= (const T& val);
    valarray& operator%= (const T& val);
    valarray& operator+= (const T& val);
    valarray& operator-= (const T& val);
    valarray& operator^= (const T& val);
    valarray& operator&= (const T& val);
    valarray& operator|= (const T& val);
    valarray& operator<<= (const T& val);
    valarray& operator>>= (const T& val);
    非成员函数
    template <class T> valarray<T> operator* (const valarray<T>& lhs, const valarray<T>& rhs);
    template <class T> valarray<T> operator* (const T& val, const valarray<T>& rhs);
    template <class T> valarray<T> operator* (const valarray<T>& lhs, const T& val);
    
    template <class T> valarray<T> operator/ (const valarray<T>& lhs, const valarray<T>& rhs);
    template <class T> valarray<T> operator/ (const T& val, const valarray<T>& rhs);
    template <class T> valarray<T> operator/ (const valarray<T>& lhs, const T& val);
    
    template <class T> valarray<T> operator% (const valarray<T>& lhs, const valarray<T>& rhs);
    template <class T> valarray<T> operator% (const T& val, const valarray<T>& rhs);
    template <class T> valarray<T> operator% (const valarray<T>& lhs, const T& val);
    
    template <class T> valarray<T> operator+ (const valarray<T>& lhs, const valarray<T>& rhs);
    template <class T> valarray<T> operator+ (const T& val, const valarray<T>& rhs);
    template <class T> valarray<T> operator+ (const valarray<T>& lhs, const T& val);
    
    template <class T> valarray<T> operator- (const valarray<T>& lhs, const valarray<T>& rhs);
    template <class T> valarray<T> operator- (const T& val, const valarray<T>& rhs);
    template <class T> valarray<T> operator- (const valarray<T>& lhs, const T& val);
    
    template <class T> valarray<T> operator^ (const valarray<T>& lhs, const valarray<T>& rhs);
    template <class T> valarray<T> operator^ (const T& val, const valarray<T>& rhs);
    template <class T> valarray<T> operator^ (const valarray<T>& lhs, const T& val);
    
    template <class T> valarray<T> operator& (const valarray<T>& lhs, const valarray<T>& rhs);
    template <class T> valarray<T> operator& (const T& val, const valarray<T>& rhs);
    template <class T> valarray<T> operator& (const valarray<T>& lhs, const T& val);
    
    template <class T> valarray<T> operator| (const valarray<T>& lhs, const valarray<T>& rhs);
    template <class T> valarray<T> operator| (const T& val, const valarray<T>& rhs);
    template <class T> valarray<T> operator| (const valarray<T>& lhs, const T& val);
    
    template <class T> valarray<T> operator<< (const valarray<T>& lhs, const valarray<T>& rhs);
    template <class T> valarray<T> operator<< (const T& val, const valarray<T>& rhs);
    template <class T> valarray<T> operator<< (const valarray<T>& lhs, const T& val);
    
    template <class T> valarray<T> operator>> (const valarray<T>& lhs, const valarray<T>& rhs);
    template <class T> valarray<T> operator>> (const T& val, const valarray<T>& rhs);
    template <class T> valarray<T> operator>> (const valarray<T>& lhs, const T& val);
    
    template <class T> valarray<bool> operator&& (const valarray<T>& lhs, const valarray<T>& rhs);
    template <class T> valarray<bool> operator&& (const T& val, const valarray<T>& rhs);
    template <class T> valarray<bool> operator&& (const valarray<T>& lhs, const T& val);
    
    template <class T> valarray<bool> operator|| (const valarray<T>& lhs, const valarray<T>& rhs);
    template <class T> valarray<bool> operator|| (const T& val, const valarray<T>& rhs);
    template <class T> valarray<bool> operator|| (const valarray<T>& lhs, const T& val);
    
    template <class T> valarray<bool> operator== (const valarray<T>& lhs, const valarray<T>& rhs);
    template <class T> valarray<bool> operator== (const T& val, const valarray<T>& rhs);
    template <class T> valarray<bool> operator== (const valarray<T>& lhs, const T& val);
    
    template <class T> valarray<bool> operator!= (const valarray<T>& lhs, const valarray<T>& rhs);
    template <class T> valarray<bool> operator!= (const T& val, const valarray<T>& rhs);
    template <class T> valarray<bool> operator!= (const valarray<T>& lhs, const T& val);
    
    template <class T> valarray<bool> operator< (const valarray<T>& lhs, const valarray<T>& rhs);
    template <class T> valarray<bool> operator< (const T& val, const valarray<T>& rhs);
    template <class T> valarray<bool> operator< (const valarray<T>& lhs, const T& val);
    
    template <class T> valarray<bool> operator> (const valarray<T>& lhs, const valarray<T>& rhs);
    template <class T> valarray<bool> operator> (const T& val, const valarray<T>& rhs);
    template <class T> valarray<bool> operator> (const valarray<T>& lhs, const T& val);
    
    template <class T> valarray<bool> operator<= (const valarray<T>& lhs, const valarray<T>& rhs);
    template <class T> valarray<bool> operator<= (const T& val, const valarray<T>& rhs);
    template <class T> valarray<bool> operator<= (const valarray<T>& lhs, const T& val);
    
    template <class T> valarray<bool> operator>= (const valarray<T>& lhs, const valarray<T>& rhs);
    template <class T> valarray<bool> operator>= (const T& val, const valarray<T>& rhs);
    template <class T> valarray<bool> operator>= (const valarray<T>& lhs, const T& val);
    valarray 操作符 每个函数都对valarray中的所有元素执行各自的操作。当左侧参数和右侧参数均为valarray对象时,将在每个对象中的对应元素之间执行操作(左侧的第一个元素与右侧的第一个元素,第二个与第二个元素 , 等等...)。当参数之一是一个值时,该操作将针对该值应用于valarray中的所有元素。如果valarray中保存的类型本身不支持该操作,则不应实例化该操作。该类还会重载operator =operator []
  • 参数

    参数 描述
    val 用作valarray中所有元素的左操作数或右操作数的值。T是valarray(值类型)的模板参数。
    lhs 左侧valarray对象。
    rhs 右侧valarray对象。
  • 返回值

    对于一元运算符,具有修改后值的新valarray对象。对于复合赋值运算符,为左侧的valarray对象。对于二元运算符,一个新的valarray对象具有对每个元素执行该操作的结果。对于比较运算符,使用bool元素的valarray以及每个单独比较的结果。允许按值返回valarray的运算符改为返回其他类型的对象。 要求这种类型可以隐式转换为valarray,并且必须作为所有使用valarray&arguments的函数的参数来支持。 这允许写时复制实现。
  • 示例

    
    // valarray operators example
    #include <iostream>     // std::cout
    #include <valarray>     // std::valarray
    
    int main ()
    {
      int init[]= {10,20,30,40};
                                         //     foo:           bar:
    
      std::valarray<int> foo (init, 4);  //  10 20 30 40
      std::valarray<int> bar (25,4);     //  10 20 30 40    25 25 25 25
    
      bar += foo;                        //  10 20 30 40    35 45 55 65
    
      foo = bar + 10;                    //  45 55 65 75    35 45 55 65
    
      foo -= 10;                         //  35 45 55 65    35 45 55 65
    
      std::valarray<bool> comp = (foo==bar);
    
      if ( comp.min() == true )
        std::cout << "foo and bar are equal.\n";
      else
        std::cout << "foo and bar are not equal.\n";
    
      return 0;
    }
    
    尝试一下
    输出
    
    foo and bar are equal.
    
  • 复数

    取决于库的实现(操作可以并行化)。
  • 迭代有效

    不变:有效的迭代器,引用和子数组保持其有效性。
  • 数据竞争

    访问该操作中涉及的valarray对象中的所有元素,并且-如果是复合赋值-则也要进行修改。
  • 异常安全

    如果对元素执行的任何操作均引发异常,则将导致未定义的行为。如果某个函数未能分配所需的存储空间,则可能会引发异常(例如bad_alloc),尽管这不是强制性的。
  • 相关页面

    valarray::operator= 分配内容(公共成员函数)
    valarray::operator[] 访问元素或下标(公共成员函数)