title: Initialize std::vector by calling the non-default constructor of each element with varying arguments, without unnecessary copying
body: <p>I am looking for the way to initialize  a vector with the minimal amount of copy.</p>
  
  <pre><code>struct T {
     std::vector&lt;int&gt; v;
     //some stuff here ; pod
     T(std::vector&lt;int&gt; vv):v(vv){}://a non default constructor
  };
  </code></pre>
  
  <p>Now to initialize a vector, i do </p>
  
  <pre><code>std::vector&lt;T&gt; vec(n);
  for (auto it = vec.begin() ;it != vec.end(),++it) 
  {
    // do some stuff to *it;
  }
  </code></pre>
  
  <p>the "do some stuff here" basically just redo what is done in the constructor, and so i have two initialization of T.v...
  I also thought of doing </p>
  
  <pre><code>std::vector&lt;T&gt; vec;
  for (int i = 0 ; i&lt; n;++i) 
  {
     std::vector&lt;int&gt; vv = // blabla
     T t(vv);
     vec.push_back(t);
  }
  </code></pre>
  
  <p>which again result on vv being copied...</p>
  
  <p>So how do i initialize a vector of struct, where each element is initialized using a non default constructor (call with different argument for each element) ?</p>