如何从 istream 中读取特定数量的字节到向量中?

How to read specific number of bytes from istream into a vector?

我想从 istream 中读取一些字节到 vector 中。我以为 this 会有答案,但实际上它问的是完全不同的事情。

到目前为止我的代码:

std::vector<char> read_buffer(std::istream& is, const std::size_t size) {
    std::vector<char> buf;
    buf.reserve(size);
    is.read(buf.data(), size);
    return buf;
}

这不行,因为vector是在它不知道的情况下写入的,所以在is.read之后,它的大小仍然是0,而不是size。实现此功能的正确方法是什么?

向量容器包装了一个动态数组。了解向量的容量和大小之间的区别很重要。

尺码: 向量的大小是它当前持有的项目数。

容量: 容量是向量在不需要重新分配内存的情况下可以容纳的项目数。

容器包裹的数组可以大于它包含的元素数。当你推回一个新元素时,向量会将它添加到数组的末尾。如果没有剩余空间,即:容量在推入之前已经等于之前的大小,则向量请求更大的数组。

在您的代码中,您使用了 reserve 来增加向量的容量。向量的大小保持为零。

要增加向量的大小,您应该使用 resize