我有一个压缩到文件的STL向量。我想将文件解压缩到另一个向量中。文件内容非常大,所以我必须将其直接解压缩到矢量中。有没有办法做到这一点?我已经看过很多例子,但他们都假设你是从c风格的数组复制到矢量的数据存储器中。
答案 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>{}
};
编辑:将数据读入矢量,事先只需 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
的不变量,例如其大小。