title: Is this the most efficient way of move the contents of one std::vector to the end of another in C++11?
body: <p>I was thinking that the <code>vector::insert()</code> and <code>std::copy()</code> commands require extra allocation.  However, if I <code>push_back()</code> a newly created element an then <code>swap()</code> it I think this would reduce any allocations so long as the contained type is not allocating with the default constructor.</p>
  
  <p>My question is actually specifically for <code>std::vector</code>s of type <code>std::string</code>, but should work for other contained types as stated here:</p>
  
  <pre><code>template &lt;typename T&gt;
  void appendMove(std::vector&lt;T&gt;&amp; dst, std::vector&lt;T&gt;&amp; src)
  {
      dst.reserve(dst.size() + src.size())
      for(std::vector&lt;T&gt;::iterator it = src.begin(); it != src.end(); ++it)
      {
          dst.push_back(std::vector&lt;T&gt;());
          std::swap(dst.end()[-1], *it);
      }
  }
  </code></pre>
  
  <p>Am I correct?  Am I missing anything else?  Maybe there's some better way of doing this?</p>