2017-10-11 85 views
0

我需要猛烈地寫入矢量(以避免多餘memcpy)。以舊式(髒)方式填充矢量<char>

讓我們考慮這個非常簡單的一段代碼

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我不能修改。

+2

'resize',而不是'reserve'(和'大小()',而不是'容量()' )? – Jarod42

+0

force_actual_size正在調整大小。 – 2017-10-11 10:03:49

+0

@ manni66:當OP使用它時,你會用''\ 0''覆蓋數據。 – Jarod42

回答

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); 
+0

@ Jarod42:哎呦,固定。 –

+0

也許會添加一些解釋爲什麼OP的版本不起作用?我認爲這會有所幫助。 – Knoep

+0

它的工作原理!我只對第一個'resize'(當然,在現實生活中,我的數據大大超過50個字節)中的整個向量零的初始化過程感到遺憾。 –