std::vectorv; v.resize(sz); memcpy(&v[0], data, data + sz);
まず最初に1点.&v[0]のようにvectorの内部バッファを連続した配列とみなした上でCAPIに突っ込むのは標準で保証された安全な操作です.(ISO/IEC 14882-2003 23.2.4 -1-が論拠になります.後,「Effective STL」も参考になります.)
上のコードはそこそこ速いと思われます.が,そこそこ速いのは恐らくvectorのvalue_typeが(unsigned) charの場合だけです.他のPOD,例えばint等ではresizeしたときに明示的なfor文による初期化が行われるため,このやり方でも依然memcpyと比較して圧倒的に遅いという主張は恐らく正しいかと思います.
ちなみに,value_typeがcharの時だけそこそこ速いだろうと予想する理由ですが,resizeがfill_nで実装されていて,そのfill_nが(unsigned) char*に対してのみ特別にdispatchされていてmemsetで実装されているところに由来します.