C++ Primer 【第四版】第八章 标准IO库
2014-08-10 13:49
99 查看
8.1
假设os是一个ofstream对象,下面程序做了什么?
os<< “Goodbye!” << endl;
如果os
是ostringstream对象呢?
或者,os
是ifstream对象呢?
答:第一个,向文件中写入“Goodbye”,
第二个向string对象中写入“Goodbye”,第三个,如果os是一个ifstream对象,则错误,因为ifstream类中没有定义操作符
<< 。
8.2
下面的声明是错误的,指出其错误并改正之: ostream print(ostream os);
答:标准库类型不允许做复制或赋值操作。形参或返回类型不能为流类型,所以上句代码错误,因为它把流类型的对象当做了形参。应改为传递指向该对象的指针或引用:
ostream &print( ostream &os );
8.3
编写一个函数,其唯一的形参和返回值都是istream&类型。该函数应一直读取流直到到达文件的结束符为止,还应将读到的内容输出到标准输出中。最后,重设流使其有效,并返回该流。
答:
//
定义控制台¬应用程序的入口点。
//
#include
"stdafx.h"
#include
"stdafx.h"
#include
<iostream>
using
namespace std;
istream &
f( istream&
in )
{
int ival;
while ( in >>
ival,!in.eof())
// 遇到文件结束符之前一直读入数据
{
if(in.bad())
// input stream is corrupted; bail out, 流是否已被破坏
throw runtime_error("IO stream corrupted");
if ( in.fail())
// badinput
{cerr<<
" bad date, try again:";
in.clear( );
// reset the stream
in.setstate(istream::eofbit);
// 结束死循环
continue;
}
// processinput
cout<<
ival << endl;
}
in.clear();
// 将n中的所有状态值都设为有效状态
return in;
}
int
main()
{
cout<<
" Input some words ( ctrl + z to end):\n";
f( cin );
system("pause");
return 0;
}
8.4
通过cin为实参实现调用来测试上题编写的函数。
8.5
导致下面的while循环终止的原因是什么?
while ( cin >> i ) //….
答:遇到了结束符;或者遇到了系统故障;读入了无效数据。
8.6
由于ifstream继承了istream,因此可将ifstream对象传递给形参为istream引用的函数。使用8.2节第一个习题编写的函数读取已命名的文件。
// 8.6.cpp :
定¡§义°?控?制?台¬¡§应®|用®?程¨¬序¨°的Ì?入¨?口¨²点Ì?。¡ê
//
#include
"stdafx.h"
#include
<iostream>
#include
<fstream>
#include
<string>
using
namespace std;
istream &
f( istream&
is )
{
//int ival;
string
ival;
while ( is >>
ival,!is.eof())
// 遇®?到Ì?文?件t结¨¢束º?符¤?之?前¡ã一°?直¡À读¨¢入¨?数ºy据Y
{
if(is.bad())
// input streamis corrupted; bail out, 流¢¡Â是º?否¤?已°?被À?破?坏¦Ì
throwruntime_error("IOstream corrupted");
if ( is.fail())
//bad input
{
cerr<<
" bad data, try again.";
is.clear( ); // reset the stream
is.setstate(istream::eofbit);
// 结¨¢束º?死¨¤循-环¡¤
continue;
}
// processinput
cout<<
ival << endl;
}
is.clear();
// 将?in中D的Ì?所¨´有®D状Á¡ä态¬?值¦Ì都?设¦¨¨为a有®D效¡ì状Á¡ä态¬?
return is;
}
int
_tmain(int
argc, _TCHAR*
argv[])
{
string
fName;
cout<<
" Input name of file( ctrl + z to end):\n";
cin>>
fName;
ifstream
readfile;
readfile.open(fName.c_str());
// open thefile
if (!readfile)
{
cerr<<
" error: cannot open the inputfile:" << fName <<
endl;
return-1;
}
f(readfile);
system("pause");
return 0;
}
8.7
本节所编写的两个程序,在打开vector容器中存放的任何文件失败时,使用break跳出while循环。重写这两个循环,如果文件无法打开,则输出警告信息,然后从vector中获取下一个文件名继续。
ifstream
input;
vector<string>::const_iterator
it = files.begin();
while (
it != files.end() )
{
input.open(
it->c_str() );
if ( !input )
{
cerr<<
“¡ã error:can
not open
input file:
“¡ã<< *it <<
endl;
input.clear();
++it; //
获?取¨?下?一°?个?文?件t
continue; //
继¨¬续?处ä|理¤¨ª下?一°?个?文?件t
}
while ( input >>
s)
process(s);
input.close();
input.clear();
++it;
}
8.8
上一个习题的程序可以不用continue语句实现。分别使用或不使用continue语句编写该程序。
不使用continue语句:
ifstream
input;
vector<string>::const_iterator
it = files.begin();
while (
it != files.end() )
{
input.open(
it->c_str() );
if ( !input )
{
cerr<<
“¡ã error:can
not open
input file:
“¡ã <<*it <<
endl;
input.clear();
++it; //
获?取¨?下?一°?个?文?件t
}
else
{
while ( input >>
s)
process(s);
input.close();
input.clear();
++it;
}
}
8.9
编写函数打开文件用于输入,将文件内容读入string类型的vector容器,每一行存储为该容器对象的一个元素。
// 8.9.cpp :
定义控制台¬应用程序的入口点
//
#include
"stdafx.h"
#include
< iostream >
#include
< fstream >
#include
< string >
#include
< vector >
using
namespace std;
int
_tmain(int
argc, _TCHAR*
argv[])
{
string
s;
ifstream
input("test.txt");
// open the file
//cout <<" Input files name:\n\t";
if ( !input )
// fail to open
{
cerr<<
" error: can not open input file:" << endl;
return-1;
}
// 打开后,将文件内容读入string类型的vector容器,每一行存储为
// 该容器对象的一个元素。
vector<string>
fileWord;
while ( getline(input,
s) )
{
fileWord.push_back(s);
//input.clear();
}
input.close();
// close thefile
// 输出出来
vector<string>::const_iteratorit =
fileWord.begin();
while ( it !=
fileWord.end() )
{
cout<< *it <<
endl;
++it; //
获取下一个文件
}
system("pause");
return 0;
}
8.10
重写上面的程序,把文件中的每个单词存储为容器的一个元素。
#include
"stdafx.h"
#include
< iostream >
#include
< fstream >
#include
< string >
#include
< vector >
using
namespace std;
int
_tmain(int
argc, _TCHAR*
argv[])
{
string
s;
ifstream
input("test.txt");
// open the file
//cout <<" Input files name:\n\t";
if ( !input )
// fail to open
{
cerr<<
" error: can not open input file:" << endl;
return-1;
}
// 打开后,将文件内容读入string类型的vector容器,每一行存储为
// 该容器对象的一个元素。
vector<string>
fileWord;
while ( input >>
s)
{
fileWord.push_back(s);
//input.clear();
}
// 输出出来
vector<string>::const_iteratorit =
fileWord.begin();
while ( it !=
fileWord.end() )
{
cout<< *it <<
endl;
++it; //
获取下一个文件
}
system("pause");
return 0;
}
8.11
对于open_file函数,请解释为什么在调用open前先调用clear函数。如果忽略这个函数调用,会出现什么问题?如果在open后面调用clear函数,又会怎样?
此时不清楚通过形参In传进来的流对象的当前状态,所以在调用open前,先调用clear函数,将In置为有效状态。如果忽略,则in的原来的状态不会被清除,当用它打开另一个文件后,有可能导致对另一个文件的操作出现问题。
在open后调用clear函数,in都会被置为有效状态,从而为后续的文件操作带来问题。
8.12
对于open_file函数,请解释如果程序执行close函数失败,会产生什么结果?
会不能打开给定文件,因为open函数会检查流是否已经打开,如果打开,则设置内部状态指示发生了错误,接下来使用in的任何尝试都会失败。
8.13
编写类似open_file的程序打开文件用于输出。
// 8.13.cpp :
定义控制台应用程序的入口点
//
#include
"stdafx.h"
#include
< iostream >
#include
< fstream >
#include
< string >
using
namespace std;
int
_tmain(int
argc, _TCHAR*
argv[])
{
cout<<
" input name of file you want toopen:\n ";
string
fName;
cin>>
fName;
fstream
fOpen;
fOpen.clear();
fOpen.open(fName.c_str());
// open thefile
if ( !fOpen )
{
cerr<<
" cannot open the file given."<< endl;
return-1;
}
string
s;
while ( fOpen >>
s)
{
cout<<
s << "";
}
fOpen.close();
system("pause");
return 0;
}
8.14
使用open_file函数以及8,2节第一个习题编写的程序,打开给定文件并读取内容。
// 8.14.cpp :
定义控制台应用程序的入口点
//
#include"stdafx.h"
#include
<iostream>
#include< fstream >
#include< string >
using namespace
std;
istream &
f( istream&
in )
{
string
ival;
while
( in>>
ival, !in.eof())
// 遇到文件结束符之前一直读入数据
{ if(in.bad())
// input streamis corrupted; bail out, 流是否已被破坏
throw
runtime_error(
"IO streamcorrupted"
);
if ( in.fail())
// badinput
{
cerr<<
"bad date, try again:";
in.clear( );
// reset the stream
in.setstate(istream::eofbit);
// 结束死循环
continue;
}
// process input
cout<<
ival << endl;
}
in.clear();
// 将in中的所有状态值都设为有效状态
return in;
}
int
openFile(
string fName )
{
fstream
fOpen;
fOpen.clear();
fOpen.open(fName.c_str());
// open thefile
if ( !fOpen )
{
cerr<<
" cannot open the file given."<< endl;
return-1;
}
string
s;
while ( fOpen >>
s)
{
f( fOpen );
// 调用f()函数检测从文件中读入数据
cout<<
s << "";
}
fOpen.close();
return 1;
}
int
_tmain(int
argc, _TCHAR*
argv[])
{
cout<<
" input name of file you want toopen:\n ";
string
fName;
cin>>
fName;
openFile(fName );
system("pause");
return 0;
}
8.15
使用8.2节第一个习题编写的函数输出istringstream对象的内容。
// 8.15.cpp :定义控制台应用程序的入口点
//
#include
"stdafx.h"
#include
<iostream>
#include
<sstream>
#include
< string>
using
namespace std;
istream &
f( istream&
in )
{
string
val;
while
( in>>
val, !in.eof())
// 遇到文件结束符之前一直读入数据
{
if(in.bad())
// input stream iscorrupted; bail out, 流是否已被破坏
throw runtime_error("IO stream corrupted");
if
( in.fail() )
// bad input
{
cerr<<
" bad date, try again:";
in.clear( );
// reset the stream
in.setstate(istream::eofbit);
// 结束死循环
continue;
}
// processinput
cout<<
val << "";
}
in.clear();
//将in中的所有状态值都设为有效状态
return in;
}
int
_tmain(int
argc, _TCHAR*
argv[])
{
int val1 =512,
val2 = 1024;
ostringstreamformat_message;
format_message<<
" val1: " << val1 <<
"val2: " << val2 <<"\n";
istringstreaminput_istring(
format_message.str() );
f( input_istring );
system("pause");
return 0;
}
8.16
编写程序将文件中的每一行存储在vector<string>容器对象中,然后使用istringstream从vector里以每次读一个单词的形式读取所存储的行。
// 8.16.cpp :
定义控制台应用程序的入口点
//
#include
"stdafx.h"
#include
< iostream >
#include
< fstream >
#include
< sstream >
#include
< string >
#include
< vector >
using
namespace std;
int
_tmain(int
argc, _TCHAR*
argv[])
{
string
line, word;
ifstream
input("test.txt");
// open the file
if ( !input )
// fail to open
{
cerr<<
" error: can not open input file:" << endl;
return -1;
}
// 打开后,将文件内容读入string类型的vector容器,每一行存储为
// 该容器对象的一个元素。
vector<string>
fileWord;
while
( getline(input,
line) )
{
fileWord.push_back(line);
//input.clear();
}
input.close();
// close thefile 存储完毕
// 使用istringstream从vector里以每次读一个单词的形式读取所存储的行
vector<string>::const_iteratorit =
fileWord.begin();
while
( it!=
fileWord.end())
{
istringstreamdivWord( *it);
// 将每行分解为每个单词输出来
while
( divWord>>
word )
{
cout<<
word << " ";
}
cout<<
endl;
++it;
// 获取下一行
}
system("pause");
return 0;
}
假设os是一个ofstream对象,下面程序做了什么?
os<< “Goodbye!” << endl;
如果os
是ostringstream对象呢?
或者,os
是ifstream对象呢?
答:第一个,向文件中写入“Goodbye”,
第二个向string对象中写入“Goodbye”,第三个,如果os是一个ifstream对象,则错误,因为ifstream类中没有定义操作符
<< 。
8.2
下面的声明是错误的,指出其错误并改正之: ostream print(ostream os);
答:标准库类型不允许做复制或赋值操作。形参或返回类型不能为流类型,所以上句代码错误,因为它把流类型的对象当做了形参。应改为传递指向该对象的指针或引用:
ostream &print( ostream &os );
8.3
编写一个函数,其唯一的形参和返回值都是istream&类型。该函数应一直读取流直到到达文件的结束符为止,还应将读到的内容输出到标准输出中。最后,重设流使其有效,并返回该流。
答:
//
定义控制台¬应用程序的入口点。
//
#include
"stdafx.h"
#include
"stdafx.h"
#include
<iostream>
using
namespace std;
istream &
f( istream&
in )
{
int ival;
while ( in >>
ival,!in.eof())
// 遇到文件结束符之前一直读入数据
{
if(in.bad())
// input stream is corrupted; bail out, 流是否已被破坏
throw runtime_error("IO stream corrupted");
if ( in.fail())
// badinput
{cerr<<
" bad date, try again:";
in.clear( );
// reset the stream
in.setstate(istream::eofbit);
// 结束死循环
continue;
}
// processinput
cout<<
ival << endl;
}
in.clear();
// 将n中的所有状态值都设为有效状态
return in;
}
int
main()
{
cout<<
" Input some words ( ctrl + z to end):\n";
f( cin );
system("pause");
return 0;
}
8.4
通过cin为实参实现调用来测试上题编写的函数。
8.5
导致下面的while循环终止的原因是什么?
while ( cin >> i ) //….
答:遇到了结束符;或者遇到了系统故障;读入了无效数据。
8.6
由于ifstream继承了istream,因此可将ifstream对象传递给形参为istream引用的函数。使用8.2节第一个习题编写的函数读取已命名的文件。
// 8.6.cpp :
定¡§义°?控?制?台¬¡§应®|用®?程¨¬序¨°的Ì?入¨?口¨²点Ì?。¡ê
//
#include
"stdafx.h"
#include
<iostream>
#include
<fstream>
#include
<string>
using
namespace std;
istream &
f( istream&
is )
{
//int ival;
string
ival;
while ( is >>
ival,!is.eof())
// 遇®?到Ì?文?件t结¨¢束º?符¤?之?前¡ã一°?直¡À读¨¢入¨?数ºy据Y
{
if(is.bad())
// input streamis corrupted; bail out, 流¢¡Â是º?否¤?已°?被À?破?坏¦Ì
throwruntime_error("IOstream corrupted");
if ( is.fail())
//bad input
{
cerr<<
" bad data, try again.";
is.clear( ); // reset the stream
is.setstate(istream::eofbit);
// 结¨¢束º?死¨¤循-环¡¤
continue;
}
// processinput
cout<<
ival << endl;
}
is.clear();
// 将?in中D的Ì?所¨´有®D状Á¡ä态¬?值¦Ì都?设¦¨¨为a有®D效¡ì状Á¡ä态¬?
return is;
}
int
_tmain(int
argc, _TCHAR*
argv[])
{
string
fName;
cout<<
" Input name of file( ctrl + z to end):\n";
cin>>
fName;
ifstream
readfile;
readfile.open(fName.c_str());
// open thefile
if (!readfile)
{
cerr<<
" error: cannot open the inputfile:" << fName <<
endl;
return-1;
}
f(readfile);
system("pause");
return 0;
}
8.7
本节所编写的两个程序,在打开vector容器中存放的任何文件失败时,使用break跳出while循环。重写这两个循环,如果文件无法打开,则输出警告信息,然后从vector中获取下一个文件名继续。
ifstream
input;
vector<string>::const_iterator
it = files.begin();
while (
it != files.end() )
{
input.open(
it->c_str() );
if ( !input )
{
cerr<<
“¡ã error:can
not open
input file:
“¡ã<< *it <<
endl;
input.clear();
++it; //
获?取¨?下?一°?个?文?件t
continue; //
继¨¬续?处ä|理¤¨ª下?一°?个?文?件t
}
while ( input >>
s)
process(s);
input.close();
input.clear();
++it;
}
8.8
上一个习题的程序可以不用continue语句实现。分别使用或不使用continue语句编写该程序。
不使用continue语句:
ifstream
input;
vector<string>::const_iterator
it = files.begin();
while (
it != files.end() )
{
input.open(
it->c_str() );
if ( !input )
{
cerr<<
“¡ã error:can
not open
input file:
“¡ã <<*it <<
endl;
input.clear();
++it; //
获?取¨?下?一°?个?文?件t
}
else
{
while ( input >>
s)
process(s);
input.close();
input.clear();
++it;
}
}
8.9
编写函数打开文件用于输入,将文件内容读入string类型的vector容器,每一行存储为该容器对象的一个元素。
// 8.9.cpp :
定义控制台¬应用程序的入口点
//
#include
"stdafx.h"
#include
< iostream >
#include
< fstream >
#include
< string >
#include
< vector >
using
namespace std;
int
_tmain(int
argc, _TCHAR*
argv[])
{
string
s;
ifstream
input("test.txt");
// open the file
//cout <<" Input files name:\n\t";
if ( !input )
// fail to open
{
cerr<<
" error: can not open input file:" << endl;
return-1;
}
// 打开后,将文件内容读入string类型的vector容器,每一行存储为
// 该容器对象的一个元素。
vector<string>
fileWord;
while ( getline(input,
s) )
{
fileWord.push_back(s);
//input.clear();
}
input.close();
// close thefile
// 输出出来
vector<string>::const_iteratorit =
fileWord.begin();
while ( it !=
fileWord.end() )
{
cout<< *it <<
endl;
++it; //
获取下一个文件
}
system("pause");
return 0;
}
8.10
重写上面的程序,把文件中的每个单词存储为容器的一个元素。
#include
"stdafx.h"
#include
< iostream >
#include
< fstream >
#include
< string >
#include
< vector >
using
namespace std;
int
_tmain(int
argc, _TCHAR*
argv[])
{
string
s;
ifstream
input("test.txt");
// open the file
//cout <<" Input files name:\n\t";
if ( !input )
// fail to open
{
cerr<<
" error: can not open input file:" << endl;
return-1;
}
// 打开后,将文件内容读入string类型的vector容器,每一行存储为
// 该容器对象的一个元素。
vector<string>
fileWord;
while ( input >>
s)
{
fileWord.push_back(s);
//input.clear();
}
// 输出出来
vector<string>::const_iteratorit =
fileWord.begin();
while ( it !=
fileWord.end() )
{
cout<< *it <<
endl;
++it; //
获取下一个文件
}
system("pause");
return 0;
}
8.11
对于open_file函数,请解释为什么在调用open前先调用clear函数。如果忽略这个函数调用,会出现什么问题?如果在open后面调用clear函数,又会怎样?
此时不清楚通过形参In传进来的流对象的当前状态,所以在调用open前,先调用clear函数,将In置为有效状态。如果忽略,则in的原来的状态不会被清除,当用它打开另一个文件后,有可能导致对另一个文件的操作出现问题。
在open后调用clear函数,in都会被置为有效状态,从而为后续的文件操作带来问题。
8.12
对于open_file函数,请解释如果程序执行close函数失败,会产生什么结果?
会不能打开给定文件,因为open函数会检查流是否已经打开,如果打开,则设置内部状态指示发生了错误,接下来使用in的任何尝试都会失败。
8.13
编写类似open_file的程序打开文件用于输出。
// 8.13.cpp :
定义控制台应用程序的入口点
//
#include
"stdafx.h"
#include
< iostream >
#include
< fstream >
#include
< string >
using
namespace std;
int
_tmain(int
argc, _TCHAR*
argv[])
{
cout<<
" input name of file you want toopen:\n ";
string
fName;
cin>>
fName;
fstream
fOpen;
fOpen.clear();
fOpen.open(fName.c_str());
// open thefile
if ( !fOpen )
{
cerr<<
" cannot open the file given."<< endl;
return-1;
}
string
s;
while ( fOpen >>
s)
{
cout<<
s << "";
}
fOpen.close();
system("pause");
return 0;
}
8.14
使用open_file函数以及8,2节第一个习题编写的程序,打开给定文件并读取内容。
// 8.14.cpp :
定义控制台应用程序的入口点
//
#include"stdafx.h"
#include
<iostream>
#include< fstream >
#include< string >
using namespace
std;
istream &
f( istream&
in )
{
string
ival;
while
( in>>
ival, !in.eof())
// 遇到文件结束符之前一直读入数据
{ if(in.bad())
// input streamis corrupted; bail out, 流是否已被破坏
throw
runtime_error(
"IO streamcorrupted"
);
if ( in.fail())
// badinput
{
cerr<<
"bad date, try again:";
in.clear( );
// reset the stream
in.setstate(istream::eofbit);
// 结束死循环
continue;
}
// process input
cout<<
ival << endl;
}
in.clear();
// 将in中的所有状态值都设为有效状态
return in;
}
int
openFile(
string fName )
{
fstream
fOpen;
fOpen.clear();
fOpen.open(fName.c_str());
// open thefile
if ( !fOpen )
{
cerr<<
" cannot open the file given."<< endl;
return-1;
}
string
s;
while ( fOpen >>
s)
{
f( fOpen );
// 调用f()函数检测从文件中读入数据
cout<<
s << "";
}
fOpen.close();
return 1;
}
int
_tmain(int
argc, _TCHAR*
argv[])
{
cout<<
" input name of file you want toopen:\n ";
string
fName;
cin>>
fName;
openFile(fName );
system("pause");
return 0;
}
8.15
使用8.2节第一个习题编写的函数输出istringstream对象的内容。
// 8.15.cpp :定义控制台应用程序的入口点
//
#include
"stdafx.h"
#include
<iostream>
#include
<sstream>
#include
< string>
using
namespace std;
istream &
f( istream&
in )
{
string
val;
while
( in>>
val, !in.eof())
// 遇到文件结束符之前一直读入数据
{
if(in.bad())
// input stream iscorrupted; bail out, 流是否已被破坏
throw runtime_error("IO stream corrupted");
if
( in.fail() )
// bad input
{
cerr<<
" bad date, try again:";
in.clear( );
// reset the stream
in.setstate(istream::eofbit);
// 结束死循环
continue;
}
// processinput
cout<<
val << "";
}
in.clear();
//将in中的所有状态值都设为有效状态
return in;
}
int
_tmain(int
argc, _TCHAR*
argv[])
{
int val1 =512,
val2 = 1024;
ostringstreamformat_message;
format_message<<
" val1: " << val1 <<
"val2: " << val2 <<"\n";
istringstreaminput_istring(
format_message.str() );
f( input_istring );
system("pause");
return 0;
}
8.16
编写程序将文件中的每一行存储在vector<string>容器对象中,然后使用istringstream从vector里以每次读一个单词的形式读取所存储的行。
// 8.16.cpp :
定义控制台应用程序的入口点
//
#include
"stdafx.h"
#include
< iostream >
#include
< fstream >
#include
< sstream >
#include
< string >
#include
< vector >
using
namespace std;
int
_tmain(int
argc, _TCHAR*
argv[])
{
string
line, word;
ifstream
input("test.txt");
// open the file
if ( !input )
// fail to open
{
cerr<<
" error: can not open input file:" << endl;
return -1;
}
// 打开后,将文件内容读入string类型的vector容器,每一行存储为
// 该容器对象的一个元素。
vector<string>
fileWord;
while
( getline(input,
line) )
{
fileWord.push_back(line);
//input.clear();
}
input.close();
// close thefile 存储完毕
// 使用istringstream从vector里以每次读一个单词的形式读取所存储的行
vector<string>::const_iteratorit =
fileWord.begin();
while
( it!=
fileWord.end())
{
istringstreamdivWord( *it);
// 将每行分解为每个单词输出来
while
( divWord>>
word )
{
cout<<
word << " ";
}
cout<<
endl;
++it;
// 获取下一行
}
system("pause");
return 0;
}
相关文章推荐
- C++ Primer复习和学习笔记 第八章 标准IO库
- C++ Primer 第八章 标准IO库
- C++ Primer 第八章 标准IO库
- C++ Primer 【第四版】第十四章 重载操作符与转换
- C++ primer 第四版 习题3.13
- 看孟岩对C++ PRIMER第四版所写的书评
- C++ Primer 第八章 标准IO库
- C++ Primer(第四版)笔记1 标准库string类型
- C++ Primer第四版习题--4.26
- c++ primer 学习笔记-第八章
- C++ Primer 读书笔记 – 第八章
- C++ Primer的课后规划问题的第八章
- 《C++ Primer 第四版》笔记与勘误1
- C++ primer第四版15.9节案例吐血实现
- 【c++ primer】第八章 函数探幽
- 《C++ Primer 第四版》笔记(3)
- 《c++ Primer(第四版)》习题9.24
- C++ Primer 【第四版】第一章 快速入门
- C++ Primer 【第四版】第十五章 面向对象编程
- C++ Primer(第四版) 课后习题3.14 vector单词转大写