写入和读取矢量到二进制文件
Writing and reading vector to a binary file
std::vector<cv::Point3f> data;
//loop invoking
//cv::Point3f p; p.x=..; p.y=..; p.z=.. and data.push_back(p)
std::ofstream myFile("data.bin", ios::out || ios::binary);
myFile.write(reinterpret_cast<char*> (&data[0]), sizeof(cv::Point3f)*data.size());
myFile.close();
int size = data.size();
ifstream input("data.bin", ios::binary);
input.read(reinterpret_cast<char*> (&data[0]), sizeof(cv::Point3f)*size);
总是以"debug assertion failed": "vector下标out of range"结束。
这是不可能的吗?我最看重的是速度。我想读和写得尽可能快。(所以需要二进制文件)。
你在把数据写入一个根本不存在的向量元素中。
这个方法是行不通的。用std::copy
和std::back_inserter
代替!我不太了解cv::Point3f
的布局,不能给你一个代码示例。
然而,如果我只是从std::cin
流中读取单个char
s,那么它看起来像这样:
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
int main()
{
std::vector<char> data;
std::copy(
std::istream_iterator<char>(std::cin),
std::istream_iterator<char>(), // (this magic is like "end()" for streams)
std::back_inserter(data)
);
std::cout << data.size() << 'n';
}
// Output: 3
(现场演示)
您可以将此作为起点来读取sizeof(cv::Point3f)
的块,并执行必要的转换。
相关文章:
- 如何在 c++ 中将二进制文件读取为字符串
- 从二进制文件读取到数组:前面的任意数字
- 提升二进制文件读取错误不支持的版本
- 无法将二进制文件读取到 std::vector<std::byte> 中C++
- 提升序列化在从二进制文件读取时引发异常
- 从二进制文件 C++ 读取的字符串数组写入
- 将二进制文件读取到 std::vector<bool>
- 将fortran生成的二进制文件读取到C++中的带符号整数数组中
- 将从二进制文件读取的字符串转换为整数
- 从/到C 的二进制文件读取和写作整数
- 通过将结构信息从二进制文件读取到数组中,然后返回到文件C
- 将 int 的二进制文件读取到字符串 c++
- 将结构从二进制文件读取到链表,导致无限循环
- 将二进制文件读取到向量元素的地址中
- c++从二进制文件读取/写入类
- Python:将二进制文件读取到一个结构中,然后拆包
- 从二进制文件读取/写入十六进制字节
- 简单的 C++ 二进制文件读取
- 从二进制文件 c++ 读取 16 位整数
- 如何优化c++二进制文件读取