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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
enumの値から定義名を文字列化...
-
C++で2次元配列charをループしたい
-
wstringの主力
-
#include "fstream.h"
-
なぜ、C++の標準ヘッダをインク...
-
[Win + Eclipse + GCC]socketク...
-
ファイル読み込みとmap処理
-
C言語のエラーを修正したい
-
vectorのイテレータを大小比較...
-
JPEGやPNGが読めるLoadImage関数
-
CStringとString
-
VC++で文字列から任意の文字を...
-
リモートデスクトップの接続元I...
-
VHDLのvector
-
C言語のポインターで詰まっている
-
switch文のエラーについて
-
gccでコンパイル時のエラー
-
linux系OSでC99
-
名前空間でビルドエラー(LNK20...
-
ユークリッドの除去法アルゴリズム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
switch文のエラーについて
-
構文エラーが出ているのですが...
-
なぜ、C++の標準ヘッダをインク...
-
gccでコンパイル時のエラー
-
空ENTERの判別
-
【C++】ヘッダ内でstringを格納...
-
snprintfが使用できない。
-
enumの値から定義名を文字列化...
-
#include "fstream.h"
-
C++で、テキストファイルを一行...
-
std::wstringのメモリリークに...
-
C++での <iostream.h>と<iostre...
-
VC++で文字列から任意の文字を...
-
#defineの使い方について
-
wstringの主力
-
vc++の使い方について
-
std::map の const 修飾について
-
string型のフォーマット書式指...
-
構造体配列のvectorへの変換と...
-
指定した文字を削除したい
おすすめ情報