STLで、vectorのファイルへの書き出し、読み込み。
C++ の STL で vector をファイルに書き出し、読み込もうとしておりまして、まずは書き出しで躓いております。
vector<int> testvector;
for (i = 0 ; i < 10 ; i++)
testvector.push_back( i );
ofstream out("test.dat", ios::out | ios::binary);
if (!out) return 1;
out.write((vector<int>) testvector, sizeof(testvector));
out.close();
こんな感じのコードですと、
error: no matching function for call to ‘std::basic_ofstream<char, std::char_traits<char> >::write(std::vector<int, std::allocator<int> >, long unsigned int)’
/usr/include/c++/4.2.1/bits/ostream.tcc:173: note: candidates are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::write(const _CharT*, std::streamsize) [with _CharT = char, _Traits = std::char_traits<char>]
とのことです orz. どのようにすれば vector を書き出し、そして読み込むことができるのでしょうか。情報がありましたら是非お寄せください。
No.1ベストアンサー
- 回答日時:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main() {
vector<int> testvector;
for (int i = 0 ; i < 10 ; i++)
testvector.push_back( (i+1)*100 );
ofstream out("test.dat", ios::out | ios::binary);
if (!out) return 1;
int count = testvector.size();
out.write(reinterpret_cast<const char*>(&count), sizeof(count));
out.write(reinterpret_cast<const char*>(&testvector[0]), testvector.size() * sizeof(int));
out.close();
testvector.clear();
count = 0;
ifstream in("test.dat", ios::in | ios::binary);
if ( !in ) return 1;
in.read(reinterpret_cast<char*>(&count), sizeof(count));
testvector.assign(count, 0);
in.read(reinterpret_cast<char*>(&testvector[0]), testvector.size() * sizeof(int));
in.close();
for ( int i = 0; i < testvector.size(); ++i )
cout << testvector[i] << endl;
}
ありがとうございました!
vectorのsizeを書き出さないかなと思っていたのですが、readの時にassignするところなどは考えが及んでおりませんでした。ありがとうございます。
reinterpret_castについても今まで知識がなかったので、いろいろと調べてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# このプログラミング誰か教えてください 9 2022/04/22 18:50
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# このプログラミング誰か教えてください。 2 2022/04/22 18:48
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
- C言語・C++・C# このプログラミング誰か教えてくれませんか 2 2022/05/14 09:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
enumの値から定義名を文字列化...
-
std::wstringのメモリリークに...
-
2重の(?)の#include
-
VC++で文字列から任意の文字を...
-
CComBSTR型文字列の
-
boost::lexical_castで16進数文...
-
【C++】複素数で配列を使いたい
-
findnext();について
-
Linux Ubuntu19.10でQt5.14.1の...
-
C言語からgnuplot呼び出し
-
std::map の const 修飾について
-
構文エラーが出ているのですが...
-
#include "fstream.h"
-
アンワインド セマンティクス
-
ハミング符号の解読について
-
C++のifstreamの使い方
-
構造体配列のvectorへの変換と...
-
C++で大量のエラーが出る
-
このプログラミング誰か教えて...
-
C++で、テキストファイルを一行...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラーが出ているのですが...
-
VC++で文字列から任意の文字を...
-
enumの値から定義名を文字列化...
-
switch文のエラーについて
-
空ENTERの判別
-
なぜ、C++の標準ヘッダをインク...
-
【C++】ヘッダ内でstringを格納...
-
C++での <iostream.h>と<iostre...
-
#include "fstream.h"
-
#define中の#のエスケープ
-
JPEGやPNGが読めるLoadImage関数
-
リモートデスクトップの接続元I...
-
CStringとString
-
string型のフォーマット書式指...
-
std::map の const 修飾について
-
VHDLのsignedとunsignedの違いは?
-
このプログラミング誰か教えて...
-
構造体配列のvectorへの変換と...
-
指定した文字を削除したい
-
構造体に決められた文字列を入...
おすすめ情報