簡體   English   中英

將矢量寫入和讀取二進制文件

[英]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::copystd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM