[英]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);
這總是以“調試斷言失敗”結束:“向量下標超出范圍”。
那不可能嗎? 我的首要任務是速度。 我想盡快讀寫。 (因此需要二進制文件)。
好吧,您正在將數據寫入向量中根本不存在的元素中。
這種方法行不通。 改用std::copy
和std::back_inserter
! 我對cv::Point3f
的布局cv::Point3f
無法為您提供代碼示例。
但是,如果我只是從std::cin
流中讀取單個char
,那么它將看起來像這樣:
#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)
塊,並執行必要的轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.