【问题标题】:How to read specific number of bytes from istream into a vector?如何将特定数量的字节从 istream 读取到向量中?
【发布时间】:2017-11-25 02:16:22
【问题描述】:

我想从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。实现此功能的正确方法是什么?

【问题讨论】:

标签: c++ vector istream


【解决方案1】:

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

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

容量: 容量是向量可以容纳的项目数,无需重新分配内存。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 2020-11-24
    • 2023-03-05
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多