]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
New constructor for Vector<...> that takes two iterators the range of which is then...
authorwolf <wolf@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 9 Aug 2001 12:18:19 +0000 (12:18 +0000)
committerwolf <wolf@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 9 Aug 2001 12:18:19 +0000 (12:18 +0000)
git-svn-id: https://svn.dealii.org/trunk@4871 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/doc/news/2001/c-3-1.html
deal.II/lac/include/lac/vector.h
deal.II/lac/include/lac/vector.templates.h
tests/lac/vector-vector.cc
tests/lac/vector-vector.checked

index cf4eb1ef51deed91535e90edb76d69ec64030db9..ee4dc6318a594f780505b10b0521d3e86d1add7a 100644 (file)
@@ -332,6 +332,14 @@ documentation, etc</a>.
 <h3>lac</h3>
 
 <ol>
+  <li> <p>
+       Changed: The <code class="class">Vector</code> class can now be
+       initialized using a new constructor that takes two iterators
+       that denote a range of elements which are to be copied.
+       <br>
+       (WB 2001/08/08)
+       </p>
+
   <li> <p>
        Changed: The <code class="class">SolverCG</code> class now
        saves the initial matrix vector product if the initial value of
index 0ada7046dbb89f66cc75c4a2685307f5af6d8a94..60bd884573bd43d51d5c02e3b5382ad91ee4165e 100644 (file)
@@ -52,14 +52,14 @@ class Vector
                                      * those in the @p{C++} standard libraries
                                      * @p{vector<...>} class.
                                      */
-    typedef Number value_type;
-    typedef value_typepointer;
-    typedef const value_typeconst_pointer;
-    typedef value_typeiterator;
-    typedef const value_typeconst_iterator;
-    typedef value_typereference;
-    typedef const value_typeconst_reference;
-    typedef size_t size_type;
+    typedef Number            value_type;
+    typedef value_type       *pointer;
+    typedef const value_type *const_pointer;
+    typedef value_type       *iterator;
+    typedef const value_type *const_iterator;
+    typedef value_type       &reference;
+    typedef const value_type &const_reference;
+    typedef size_t            size_type;
 
 
                                     /**
@@ -101,6 +101,16 @@ class Vector
                                      * initialize all elements with zero.
                                      */
     Vector (const unsigned int n);
+
+                                    /**
+                                     * Initialize the vector with a
+                                     * given range of values pointed
+                                     * to by the iterators. This
+                                     * function is there in analogy
+                                     * to the @p{std::vector} class.
+                                     */
+    template <typename InputIterator>
+    Vector (const InputIterator first, const InputIterator last);
     
                                     /**
                                      * Destructor, deallocates
@@ -521,6 +531,24 @@ Vector<Number>::Vector () :
 {}
 
 
+
+template <typename Number>
+template <typename InputIterator>
+Vector<Number>::Vector (const InputIterator first, const InputIterator last)
+               :
+               dim (0),
+               maxdim (0),
+               val (0)
+{
+                                  // allocate memory. do not
+                                  // initialize it, as we will copy
+                                  // over to it in a second
+  reinit (std::distance (first, last), true);
+  std::copy (first, last, begin());
+};
+
+
+
 template <typename Number>
 inline
 Vector<Number>::Vector (const unsigned int n) :
@@ -546,7 +574,8 @@ Vector<Number>::~Vector ()
 
 template <typename Number>
 inline
-void Vector<Number>::reinit (const unsigned int n, const bool fast) {
+void Vector<Number>::reinit (const unsigned int n, const bool fast)
+{
   if (n==0) 
     {
       if (val) delete[] val;
index 682610b6e160d9706441cd0b1e8ddfc788cd1f75..644bc76402e2e7a478303a80683f1516a76fa437 100644 (file)
@@ -500,7 +500,7 @@ Vector<Number>::operator = (const Vector<Number>& v)
 
 
 template <typename Number>
-template<typename Number2>
+template <typename Number2>
 Vector<Number>&
 Vector<Number>::operator = (const Vector<Number2>& v)
 {
index bbb6f511458d1df9a46ee7edd968be055d3ea7e2..d37aed418d312b1737fa61a80016461f5f08fada 100644 (file)
@@ -2,7 +2,7 @@
 //    $Id$
 //    Version: $Name$
 //
-//    Copyright (C) 1998, 1999, 2000 by the deal.II authors
+//    Copyright (C) 1998, 1999, 2000, 2001 by the deal.II authors
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
@@ -65,6 +65,11 @@ void check_vectors (Vector<number1> &d1, Vector<number2> &d2)
   
   d1 = 2.5;
   print (d1);
+
+                                  // initialize with iterators
+  number1 array[] = { 0.0, 1.1, 2.2, 3.3 };
+  Vector<number1> d4 (&array[0], &array[4]);
+  print (d4);
   
   deallog << "Extract number" << std::endl;
                                   // Each line should contain two equal numbers
index 38d8d968a7a81ed179f0859094f8148a84fb9549..9d694f85f6db426e080690765caf6f4063a30276 100644 (file)
@@ -7,6 +7,7 @@ DEAL::2.00      1.50    1.00    0.50    0.00    -0.50   -1.00   -1.50   -2.00   -2.50
 DEAL::0.00     2.00    8.00    18.00   32.00   50.00   72.00   98.00   128.00  162.00  
 DEAL::0.00     2.00    4.00    6.00    8.00    10.00   12.00   14.00   16.00   18.00   
 DEAL::2.50     2.50    2.50    2.50    2.50    2.50    2.50    2.50    2.50    2.50    
+DEAL::0.00     1.10    2.20    3.30    
 DEAL::Extract number
 DEAL::-105.00  -105.00
 DEAL::1140.00  1140.00
@@ -37,6 +38,7 @@ DEAL::2.00    1.50    1.00    0.50    0.00    -0.50   -1.00   -1.50   -2.00   -2.50
 DEAL::0.00     2.00    8.00    18.00   32.00   50.00   72.00   98.00   128.00  162.00  
 DEAL::0.00     2.00    4.00    6.00    8.00    10.00   12.00   14.00   16.00   18.00   
 DEAL::2.50     2.50    2.50    2.50    2.50    2.50    2.50    2.50    2.50    2.50    
+DEAL::0.00     1.10    2.20    3.30    
 DEAL::Extract number
 DEAL::-105.00  -105.00
 DEAL::1140.00  1140.00
@@ -67,6 +69,7 @@ DEAL::2.00    1.50    1.00    0.50    0.00    -0.50   -1.00   -1.50   -2.00   -2.50
 DEAL::0.00     2.00    8.00    18.00   32.00   50.00   72.00   98.00   128.00  162.00  
 DEAL::0.00     2.00    4.00    6.00    8.00    10.00   12.00   14.00   16.00   18.00   
 DEAL::2.50     2.50    2.50    2.50    2.50    2.50    2.50    2.50    2.50    2.50    
+DEAL::0.00     1.10    2.20    3.30    
 DEAL::Extract number
 DEAL::-105.00  -105.00
 DEAL::1140.00  1140.00

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.