是否可以将文件内容直接复制到 C++ STL 向量中

is it possible to copy file contents directly into a c++ stl vector?

本文关键字:复制 C++ STL 向量 文件 是否      更新时间:2023-10-16

我有一个被压缩成文件的STL向量。我想将文件解压缩到另一个向量中。文件内容非常大,所以我必须将其直接解压缩到矢量中。有没有好方法可以做到这一点?我看过很多例子,但它们都假设你正在从 c 样式数组复制到向量的数据存储中。

不知道"解压缩"是什么意思,但这里是将原始文件数据放入向量的方法。

#include <iterator>
#include <fstream>
std::vector<char> read_file(const std::string& file_name)
{
    std::vector<char> result;
    std::ifstream file(file_name);
    std::copy(std::istream_iterator<char>(file), std::istream_iterator<char>(), std::back_inserter(result));
    return result;
}

您的问题不是很清楚,但似乎您正在尝试执行以下操作:

std::ifstream inFile("your/binary/file", std::ifstream::in | std::ifstream::binary);
inFile.seekg(std::ifstream::beg);
int temp;
//Read file to the end
while(inFile.read(reinterpret_cast<char*>(&temp), sizeof(temp)))
{
    //Store each int in the vector
    myVector.push_back(temp);
}

在这里,我假设您正在尝试加载vector<int>

如果你正在读取文本文件,你可以使用 std::vector 的双迭代器构造函数:

std::vector<double> vec{
    std::istream_iterator<double>{stream},
    std::istream_iterator<double>{}
};

住在科里鲁

编辑:将数据读入向量,只需事先reserve()它并将其data()传递给:

std::vector<Element> vec;
vec.reserve(/* the number of elements to read */);
read(fd, vec.data(), number * sizeof(Element));

编辑第 2 个:事实上,不要。这不能正确地保持std::vector的不变量,例如它的大小。