以旧式(和脏)方式填充vector <char>

时间:2017-10-11 09:56:56

标签: c++ vector stl memcpy

我需要猛烈地写入一个向量(以避免多余的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。

1 个答案:

答案 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);