如何从 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
。
我想从 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
。