假设你要读取一个数组的元素,其中有一行被破坏了(比如丢失了一些数据)。一般情况下,这会导致后面所有的元素都受损。
作为一个例子,假设我们有一个数据结构,是一个窗口数组,你希望把它持久化到一个文件中,象下面这样:
写成代码似乎很简单:
#include <iostream>
#include <vector>
#include <fstream>
struct Window
{
Window( int nLength = 0, int nHeight = 0)
: m_nWindowLength( nLength),
m_nWindowHeight( nHeight)
{}
int m_nWindowLength;
int m_nWindowHeight;
};
std::ostream & operator << ( std::ostream & streamOut, const
Window & value)
{
streamOut << value.m_nWindowLength <<
" " << value.m_nWindowHeight;
return streamOut;
}
std::istream & operator >> ( std::istream & streamIn, Window
& value)
{
streamIn >> value.m_nWindowLength >> value.m_nWindowHeight;
return streamIn;
}
void write_windows( std::vector< Window> &aWindows, const char *
strFileName)
{
std::ofstream streamOut( strFileName);
// 第一行
streamOut << aWindows.size() << std::endl;
// 其余行
std::vector< Window>::iterator itFirst = aWindows.begin(),
itLast = aWindows.end();
while ( itFirst != itLast)
{
// 每个窗口的数据都在它自己那一行
streamOut << *itFirst
<< std::endl;
++itFirst;
}
}