c++ - 正确读取和写入 std::vector 到文件中

标签 c++ file-io stl iostream stdvector

这就是重点。如何写入和读取包含 std::vector 的二进制文件?

我在想这样的事情:

//============ WRITING A VECTOR INTO A FILE ================
const int DIM = 6;
int array[DIM] = {1,2,3,4,5,6};
std::vector<int> myVector(array, array + DIM);
ofstream FILE(Path, ios::out | ofstream::binary);
FILE.write(reinterpret_cast<const char *>(&myVector), sizeof(vector) * 6);
//===========================================================

但我不知道如何读取这个 vector 。因为我认为以下是正确的,但事实并非如此:

ifstream FILE(Path, ios::in | ifstream::binary);
FILE.read(reinterpret_cast<const char *>(&myVector), sizeof(vector) * 6);

那么,如何进行操作呢?

最佳答案

尝试使用 ostream_iterator/ostreambuf_iteratoristream_iterator/istreambuf_iterator 和 STL copy 方法:

#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>

#include <fstream> // looks like we need this too (edit by π)

std::string path("/some/path/here");

const int DIM = 6;
int array[DIM] = {1,2,3,4,5,6};
std::vector<int> myVector(array, array + DIM);
std::vector<int> newVector;

std::ofstream FILE(path, std::ios::out | std::ofstream::binary);
std::copy(myVector.begin(), myVector.end(), std::ostreambuf_iterator<char>(FILE));

std::ifstream INFILE(path, std::ios::in | std::ifstream::binary);
std::istreambuf_iterator iter(INFILE);
std::copy(iter.begin(), iter.end(), std::back_inserter(newVector));

关于c++ - 正确读取和写入 std::vector 到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12372531/

相关文章:

c++ - friend 功能和 friend 类有什么区别?

c++ - Rcpp - 从矩阵/数据帧列表中提取行

C++,前向声明和递归数据类型

c++ - "this"指针和智能指针是否应该混合使用?

c++ - unordered_set::remove_if(): C3892: 无法分配给常量变量

c++ - 你能关闭 C++ 中的默认复制构造函数吗?

python - 将列表的元素打印到python中的单独文本文件中

java - 从文件读取数据并将其显示在 JTextArea 中时遇到问题

java - 如何在Java中连续检查文件是否存在? [复制]

c++ - std::string::operator[] 的结果地址是否指向一个可写的、以 nul 结尾的缓冲区?