C++ Primer(第五版) 第十章练习答案
10.1
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main ( )
{
vector< int > vec;
int i;
while ( cin >> i)
vec. emplace_back ( i) ;
cin. clear ( cin. rdstate ( ) & ~ cin. failbit & ~ cin. badbit) ;
while ( getchar ( ) != '\n' ) ;
cin >> i;
cout << count ( vec. begin ( ) , vec. end ( ) , i) << endl;
return 0 ;
}
10.2
#include <iostream>
#include <string>
#include <list>
#include <algorithm>
using namespace std;
int main ( )
{
list< string> lst;
string s;
while ( cin >> s)
lst. emplace_back ( s) ;
cin. clear ( cin. rdstate ( ) & ~ cin. failbit & ~ cin. badbit) ;
while ( getchar ( ) != '\n' ) ;
cin >> s;
cout << count ( lst. begin ( ) , lst. end ( ) , s) << endl;
return 0 ;
}
10.3
#include <algorithm>
#include <vector>
#include <iostream>
#include <numeric>
using namespace std;
int main ( )
{
vector< int > vec ( 3 , 10 ) ;
auto sum = accumulate ( vec. cbegin ( ) , vec. cend ( ) , 0 ) ;
cout << sum << endl;
return 0 ;
}
10.4
10.5
10.6
#include <algorithm>
#include <vector>
#include <iostream>
#include <numeric>
#include <iterator>
using namespace std;
int main ( )
{
vector< int > vec;
fill_n ( back_inserter ( vec) , 10 , 0 ) ;
for ( auto & i : vec)
cout << i << ends;
cout << endl;
return 0 ;
}
10.7
10.8
10.9
#include <algorithm>
#include <vector>
#include <iostream>
#include <numeric>
#include <string>
using namespace std;
void elimDups ( vector< string> & vec) ;
int main ( )
{
vector< string> vec;
string str;
while ( cin >> str)
vec. emplace ( vec. end ( ) , str) ;
elimDups ( vec) ;
for ( auto & i : vec)
cout << i << ends;
cout << endl;
return 0 ;
}
void elimDups ( vector< string> & vec)
{
sort ( vec. begin ( ) , vec. end ( ) ) ;
vec. erase ( unique ( vec. begin ( ) , vec. end ( ) ) , vec. end ( ) ) ;
}
10.10
10.11
#include <algorithm>
#include <vector>
#include <iostream>
#include <numeric>
#include <string>
using namespace std;
typedef bool ( * is) ( const string& , const string& ) ;
typedef void ( * st_sort) ( vector< string> :: iterator, vector< string> :: iterator, is) ;
bool isShorter ( const string & s1, const string & s2) ;
void elimDups ( vector< string> & vec, st_sort, is) ;
int main ( )
{
vector< string> vec;
string str;
while ( cin >> str)
vec. emplace ( vec. end ( ) , str) ;
elimDups ( vec, stable_sort, isShorter) ;
for ( auto & i : vec)
cout << i << ends;
cout << endl;
return 0 ;
}
void elimDups ( vector< string> & vec, st_sort u, is i)
{
sort ( vec. begin ( ) , vec. end ( ) ) ;
vec. erase ( unique ( vec. begin ( ) , vec. end ( ) ) , vec. end ( ) ) ;
u ( vec. begin ( ) , vec. end ( ) , i) ;
}
bool isShorter ( const string & s1, const string & s2)
{
return s1. size ( ) < s2. size ( ) ;
}
10.12
#include <algorithm>
#include <vector>
#include <iostream>
#include <numeric>
#include <string>
#include "../Sales_data/Sales_data.h"
using namespace std;
bool compareIsbn ( const Sales_data & s1, const Sales_data & s2) ;
int main ( )
{
vector< Sales_data> vec;
Sales_data sa;
while ( read ( cin, sa) )
{
vec. push_back ( sa) ;
}
sort ( vec. begin ( ) , vec. end ( ) , compareIsbn) ;
for ( auto & i : vec)
print ( cout, i) << endl;
return 0 ;
}
bool compareIsbn ( const Sales_data & s1, const Sales_data & s2)
{
return s1. isbn ( ) < s2. isbn ( ) ;
}
10.13
#include <algorithm>
#include <vector>
#include <iostream>
#include <numeric>
#include <string>
using namespace std;
bool is ( const string & s) ;
int main ( )
{
vector< string> vec;
string str;
while ( cin >> str)
vec. emplace_back ( str) ;
auto par_end = partition ( vec. begin ( ) , vec