我需要猛烈地写入一个向量(以避免多余的memcpy
)。
让我们考虑一下这段非常简化的代码
unsigned read_data ( char * buffer , unsigned maxsize )
{
const char * data = "Hi folks! I'm the data" ;
unsigned size = strlen( data ) ;
if (size > maxsize) return 0 ;
memcpy( buffer,data,size ) ;
return size ;
}
void main ()
{
std::vector<char> v ;
v.reserve( 50 ) ;
unsigned size = read_data( v.data(),v.capacity()) ;
v.force_actual_size( size ) ;
}
这是我想象的方式:数据实际写入矢量,但矢量的大小仍为0。
所以我需要这个force_actual_size
方法......
有没有办法实现它,或更好,一种干净的方式来做同样的事情。
当然,read_data
来自我无法修改的旧式API。
答案 0 :(得分:3)
您可以使用std::vector::resize
分配所需的内存,并正确更新矢量的大小:
std::vector<char> v;
v.resize(50);
const auto new_size = read_data(v.data(), v.size());
v.resize(new_size);