小编wpz*_*zdm的帖子

使用std:vector作为低级缓冲区

这里的用法与将read()直接用于C++ std:vector相同,但具有重新分配的数量.

输入文件的大小未知,因此当文件大小超过缓冲区大小时,通过加倍大小来重新分配缓冲区.这是我的代码:

#include <vector>
#include <fstream>
#include <iostream>

int main()
{
    const size_t initSize = 1;
    std::vector<char> buf(initSize); // sizes buf to initSize, so &buf[0] below is valid
    std::ifstream ifile("D:\\Pictures\\input.jpg", std::ios_base::in|std::ios_base::binary);
    if (ifile)
    {
        size_t bufLen = 0;
        for (buf.reserve(1024); !ifile.eof(); buf.reserve(buf.capacity() << 1))
        {
            std::cout << buf.capacity() << std::endl;
            ifile.read(&buf[0] + bufLen, buf.capacity() - bufLen);
            bufLen += ifile.gcount();
        }
        std::ofstream ofile("rebuild.jpg", std::ios_base::out|std::ios_base::binary);
        if (ofile)
        {
            ofile.write(&buf[0], bufLen);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

程序按预期打印矢量容量,并将输出文件写入与输入BUT相同的大小,只有与偏移前输入相同的字节initSize,之后全部为零...

使用&buf[bufLen]in …

c++ buffer vector

8
推荐指数
1
解决办法
5584
查看次数

标签 统计

buffer ×1

c++ ×1

vector ×1