std::copy är en möjlighet.
class CMyClass
{
char buf[10];
int i;
public:
CMyClass() {}
CMyClass(const char* szBuf, int i)
{
strncpy(this->buf, szBuf, sizeof(buf)-1);
this->i = i;
}
void Print() const
{
std::cout << buf << ' ' << i << std::endl;
}
friend std::ostream & operator<<(std::ostream &os, const CMyClass& instance);
friend std::istream &operator>> (std::istream &is, CMyClass& instance);
};
std::ostream & operator<<(std::ostream &os, const CMyClass& instance)
{
os << instance.buf << '\t' << instance.i << '\n';
return os;
}
std::istream &operator>> (std::istream &is, CMyClass& instance)
{
is >> instance.buf >> instance.i;
return is;
}
void main()
{
typedef std::ostream_iterator<CMyClass> OutStreamIterator;
typedef std::istream_iterator<CMyClass> InStreamIterator;
static const char szFileName[] = "c:\\data.out";
{
std::vector<CMyClass> vec1;
vec1.push_back(CMyClass("hej", 3));
vec1.push_back(CMyClass("abc", 7));
std::ofstream os(szFileName, std::ios::binary);
OutStreamIterator iterator(os, "\n");
std::copy(vec1.begin(), vec1.end(), iterator);
}
{
std::vector<CMyClass> vec2;
std::ifstream is(szFileName, std::ios::binary);
InStreamIterator ii(is);
std::copy(ii, InStreamIterator(), std::back_inserter(vec2));
for (std::vector<CMyClass>::const_iterator I=vec2.begin(); I!=vec2.end(); ++I)
{
const CMyClass & instance = *I;
instance.Print();
}
}
}