是否可以将文件内容直接复制到c ++ stl向量中?

时间:2015-06-16 15:22:24

标签: c++ vector stl

我有一个压缩到文件的STL向量。我想将文件解压缩到另一个向量中。文件内容非常大,所以我必须将其直接解压缩到矢量中。有没有办法做到这一点?我已经看过很多例子,但他们都假设你是从c风格的数组复制到矢量的数据存储器中。

3 个答案:

答案 0 :(得分:2)

不知道“解压缩”是什么意思,但这里是如何将原始文件数据转换为矢量。

#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;
}

答案 1 :(得分:0)

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

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>

答案 2 :(得分:0)

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

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

Live on Coliru

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

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

编辑2 nd :事实上,不要。这不会正确维护std::vector的不变量,例如其大小。