]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Allow initialization of Vector with std::initializer_list.
authorWolfgang Bangerth <bangerth@colostate.edu>
Thu, 28 Mar 2019 15:00:42 +0000 (09:00 -0600)
committerWolfgang Bangerth <bangerth@colostate.edu>
Thu, 28 Mar 2019 15:00:42 +0000 (09:00 -0600)
include/deal.II/lac/vector.h

index 5ba965853180ce343472716e4949d7e73bce3254..7372650b49cb7b714cabcaefd0460218f79c19c9 100644 (file)
@@ -34,6 +34,7 @@
 
 #include <cstdio>
 #include <cstring>
+#include <initializer_list>
 #include <iostream>
 #include <vector>
 
@@ -164,14 +165,34 @@ public:
   Vector(Vector<Number> &&v) noexcept = default;
 
   /**
-   * Copy constructor taking a vector of another data type. This will fail if
-   * there is no conversion path from @p OtherNumber to @p Number. Note that
-   * you may lose accuracy when copying to a vector with data elements with
+   * Copy constructor taking a vector of another data type.
+   *
+   * This constructor will fail to compile if
+   * there is no conversion path from @p OtherNumber to @p Number. You may
+   * lose accuracy when copying to a vector with data elements with
    * less accuracy.
    */
   template <typename OtherNumber>
   explicit Vector(const Vector<OtherNumber> &v);
 
+  /**
+   * Copy constructor taking an object of type `std::initializer_list`. This
+   * constructor can be used to initialize a vector using a brace-enclosed
+   * list of numbers, such as in the following example:
+   * @code
+   *   Vector<double> v({1,2,3});
+   * @endcode
+   * This creates a vector of size 3, whose (double precision) elements have
+   * values 1.0, 2.0, and 3.0.
+   *
+   * This constructor will fail to compile if
+   * there is no conversion path from @p OtherNumber to @p Number. You may
+   * lose accuracy when copying to a vector with data elements with
+   * less accuracy.
+   */
+  template <typename OtherNumber>
+  explicit Vector(const std::initializer_list<OtherNumber> &v);
+
 #ifdef DEAL_II_WITH_PETSC
   /**
    * Another copy constructor: copy the values from a PETSc vector class. This
@@ -1049,6 +1070,14 @@ inline Vector<Number>::Vector()
 
 
 
+template <typename Number>
+template <typename OtherNumber>
+Vector<Number>::Vector(const std::initializer_list<OtherNumber> &v)
+  : Vector(v.begin(), v.end())
+{}
+
+
+
 template <typename Number>
 template <typename InputIterator>
 Vector<Number>::Vector(const InputIterator first, const InputIterator last)

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.