プロが教える店舗&オフィスのセキュリティ対策術

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 を書き出し、そして読み込むことができるのでしょうか。情報がありましたら是非お寄せください。

A 回答 (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;
}
    • good
    • 2
この回答へのお礼

ありがとうございました!
vectorのsizeを書き出さないかなと思っていたのですが、readの時にassignするところなどは考えが及んでおりませんでした。ありがとうございます。
reinterpret_castについても今まで知識がなかったので、いろいろと調べてみます。

お礼日時:2010/10/24 17:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!