⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 concepts.hpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 HPP
📖 第 1 页 / 共 5 页
字号:
#else            pointer p;#endif            // Element assigment            value_type r = m.insert_element (i, j, t);            m.insert_element (i, j, t) = r;            // Zeroing            m.clear ();            // Resize            m.resize (n, n);            m.resize (n, n, false);            ignore_unused_variable_warning (p);            ignore_unused_variable_warning (r);        }    };    template<class M>    struct SparseMatrixConcept {        typedef M matrix_type;        typedef typename M::size_type size_type;        void constraints () {            function_requires< MatrixConcept<matrix_type> >();        }    };    template<class M>    struct Mutable_SparseMatrixConcept {        typedef M matrix_type;        typedef typename M::size_type size_type;        typedef typename M::value_type value_type;        void constraints () {            function_requires< SparseMatrixConcept<matrix_type> >();            function_requires< Mutable_MatrixConcept<matrix_type> >();            size_type i (0), j (0);            matrix_type m;            // Elemnent erasure            m.erase_element (i, j);        }    };    template<class T>    T    ZeroElement (T);    template<>    float    ZeroElement (float) {        return 0.f;    }    template<>    double    ZeroElement (double) {        return 0.;    }    template<>    vector<float>    ZeroElement (vector<float>) {        return zero_vector<float> ();    }    template<>    vector<double>    ZeroElement (vector<double>) {        return zero_vector<double> ();    }    template<>    matrix<float>    ZeroElement (matrix<float>) {        return zero_matrix<float> ();    }    template<>    matrix<double>    ZeroElement (matrix<double>) {        return zero_matrix<double> ();    }    template<>    std::complex<float>    ZeroElement (std::complex<float>) {        return std::complex<float> (0.f);    }    template<>    std::complex<double>    ZeroElement (std::complex<double>) {        return std::complex<double> (0.);    }    template<>    vector<std::complex<float> >    ZeroElement (vector<std::complex<float> >) {        return zero_vector<std::complex<float> > ();    }    template<>    vector<std::complex<double> >    ZeroElement (vector<std::complex<double> >) {        return zero_vector<std::complex<double> > ();    }    template<>    matrix<std::complex<float> >    ZeroElement (matrix<std::complex<float> >) {        return zero_matrix<std::complex<float> > ();    }    template<>    matrix<std::complex<double> >    ZeroElement (matrix<std::complex<double> >) {        return zero_matrix<std::complex<double> > ();    }    template<class T>    T    OneElement (T);    template<>    float    OneElement (float) {        return 1.f;    }    template<>    double    OneElement (double) {        return 1.;    }    template<>    matrix<float>    OneElement (matrix<float>) {        return identity_matrix<float> ();    }    template<>    matrix<double>    OneElement (matrix<double>) {        return identity_matrix<double> ();    }    template<>    std::complex<float>    OneElement (std::complex<float>) {        return std::complex<float> (1.f);    }    template<>    std::complex<double>    OneElement (std::complex<double>) {        return std::complex<double> (1.);    }    template<>    matrix<std::complex<float> >    OneElement (matrix<std::complex<float> >) {        return identity_matrix<std::complex<float> > ();    }    template<>    matrix<std::complex<double> >    OneElement (matrix<std::complex<double> >) {        return identity_matrix<std::complex<double> > ();    }    template<class E1, class E2>    bool    operator == (const vector_expression<E1> &e1, const vector_expression<E2> &e2) {        typedef typename promote_traits<typename E1::value_type,                                                    typename E2::value_type>::promote_type value_type;        typedef typename type_traits<value_type>::real_type real_type;        return norm_inf (e1 - e2) == real_type/*zero*/();    }    template<class E1, class E2>    bool    operator == (const matrix_expression<E1> &e1, const matrix_expression<E2> &e2) {        typedef typename promote_traits<typename E1::value_type,                                                    typename E2::value_type>::promote_type value_type;        typedef typename type_traits<value_type>::real_type real_type;        return norm_inf (e1 - e2) == real_type/*zero*/();    }    template<class T>    struct AdditiveAbelianGroupConcept {        typedef T value_type;        void constraints () {            bool r;            value_type a = value_type (), b = value_type (), c = value_type ();            r = (a + b) + c == a + (b + c);            r = ZeroElement (value_type ()) + a == a;            r = a + ZeroElement (value_type ()) == a;            r = a + (- a) == ZeroElement (value_type ());            r = (- a) + a == ZeroElement (value_type ());            r = a + b == b + a;            ignore_unused_variable_warning (r);        }    };    template<class T>    struct MultiplicativeAbelianGroupConcept {        typedef T value_type;        void constraints () {            bool r;            value_type a = value_type (), b = value_type (), c = value_type ();            r = (a * b) * c == a * (b * c);            r = OneElement (value_type ()) * a == a;            r = a * OneElement (value_type ()) == a;            r = a * (OneElement (value_type ()) / a) == a;            r = (OneElement (value_type ()) / a) * a == a;            r = a * b == b * a;            ignore_unused_variable_warning (r);        }    };    template<class T>    struct RingWithIdentityConcept {        typedef T value_type;        void constraints () {            function_requires< AdditiveAbelianGroupConcept<value_type> >();            bool r;            value_type a = value_type (), b = value_type (), c = value_type ();            r = (a * b) * c == a * (b * c);            r = (a + b) * c == a * c + b * c;            r = OneElement (value_type ()) * a == a;            r = a * OneElement (value_type ()) == a;            ignore_unused_variable_warning (r);        }    };    template<class T>    struct Prod_RingWithIdentityConcept {        typedef T value_type;        void constraints () {            function_requires< AdditiveAbelianGroupConcept<value_type> >();            bool r;            value_type a = value_type (), b = value_type (), c = value_type ();            r = prod (T (prod (a, b)), c) == prod (a, T (prod (b, c)));            r = prod (a + b, c) == prod (a, c) + prod (b, c);            r = prod (OneElement (value_type ()), a) == a;            r = prod (a, OneElement (value_type ())) == a;            ignore_unused_variable_warning (r);        }    };    template<class T>    struct CommutativeRingWithIdentityConcept {        typedef T value_type;        void constraints () {            function_requires< RingWithIdentityConcept<value_type> >();            bool r;            value_type a = value_type (), b = value_type ();            r = a * b == b * a;            ignore_unused_variable_warning (r);        }    };    template<class T>    struct FieldConcept {        typedef T value_type;        void constraints () {            function_requires< CommutativeRingWithIdentityConcept<value_type> >();            bool r;            value_type a = value_type ();            r = a == ZeroElement (value_type ()) || a * (OneElement (value_type ()) / a) == a;            r = a == ZeroElement (value_type ()) || (OneElement (value_type ()) / a) * a == a;            ignore_unused_variable_warning (r);        }    };    template<class T, class V>    struct VectorSpaceConcept {        typedef T value_type;        typedef V vector_type;        void constraints () {            function_requires< FieldConcept<value_type> >();            function_requires< AdditiveAbelianGroupConcept<vector_type> >();            bool r;            value_type alpha = value_type (), beta = value_type ();            vector_type a = vector_type (), b = vector_type ();            r = alpha * (a + b) == alpha * a + alpha * b;            r = (alpha + beta) * a == alpha * a + beta * a;            r = (alpha * beta) * a == alpha * (beta * a);            r = OneElement (value_type ()) * a == a;            ignore_unused_variable_warning (r);        }    };    template<class T, class V, class M>    struct LinearOperatorConcept {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -