C++Primer 中文版 第五版 第十章课后习题答案

//10.1
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<list>
using namespace std;
int main()
{


vector<int>a;
int t;
while(cin>>t)
{
a.push_back(t);
}
vector<int>::iterator it1=a.begin();
vector<int>::iterator it2=a.end();
int q=count(it1,it2,4);
cout<<q<<endl;
}
//10.2
#include <iostream>
#include <algorithm>
#include <list>
#include<string>
using namespace std;
int main()
{
string s;
int c;
int q=5;
list <string> lst;
while(q--)
{
cin>>s;
lst.push_back(s);
}


cin.clear();
cin.sync();
cin>>s;


if((c=count(lst.begin(),lst.end(),s))!=0)
cout<<c<<endl;






return 0;
}


//10.3
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<numeric>
#include<list>
using namespace std;
int main()
{


vector<int>a;
int t;
while(cin>>t)
{
a.push_back(t);
}
vector<int>::iterator it1=a.begin();
vector<int>::iterator it2=a.end();
int q=accumulate(it1,it2,0);
cout<<q<<endl;
}
//10.4
0应该写成0.0
//10.5
应该写成const char*
//10.6
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<numeric>
#include<list>
using namespace std;
int main()
{


vector<int>a;
int t;
while(cin>>t)
{
a.push_back(t);
}
fill_n(a.begin(),a.size(),0);
    vector<int>::iterator it1=a.begin();
    vector<int>::iterator it2=a.end();
while(it1!=it2)
{
cout<<*it1<<endl;
++it1;
}
}
//10.7
vec是空的
虽然准备了10歌空间,但是没有用到
//10.8
这个不是算法啊......
//10.9
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<numeric>
#include<list>
using namespace std;
void elimDups(vector<string>&word)
{
sort(word.begin(),word.end());
vector<string>::iterator it3=unique(word.begin(),word.end());
word.erase(it3,word.end());
}
int main()
{


vector<string>a;
int n=5;
string t;
while(n--)
{
cin>>t;
a.push_back(t);
}
elimDups(a);
vector<string>::iterator it1=a.begin();
vector<string>::iterator it2=a.end();
while(it1!=it2)
{
cout<<*it1<<endl;
++it1;
}
}
//10.10
因为算法不改变容器
//10.11
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<numeric>
#include<list>
using namespace std;
bool isShorter(string &s1,string &s2)
{
return s1.size()<s2.size();
}




int main()
{


vector<string>a;
int n=5;
string t;
while(n--)
{
cin>>t;
a.push_back(t);
}
vector<string>::iterator it1=a.begin();
vector<string>::iterator it2=a.end();
sort(a.begin(),a.end(),isShorter);
while(it1!=it2)
{
cout<<*it1<<endl;
++it1;
}
}
//10.12

但是注意,不要忘记重载=号,因为我们需要比较大小
//10.13
#include <iostream>
#include <vector>
#include <iterator>
#include<string>
#include <algorithm>
using namespace std;


bool compare(const string & cstr)
{
if (cstr.size()!=0)
return cstr.size()>=5?true:false;
else
throw -1;
}


int main()
{
string word;
vector<string> vwords;
int qq=10;
while(qq--)
{
cin>>word;
vwords.push_back(word);
}
if(!vwords.empty())
{
vector<string>::iterator iter=partition(vwords.begin(),vwords.end(),compare);
vector<string>::iterator ibegin=vwords.begin();
while(ibegin!=iter)
cout<<*ibegin++<<' ';
cout<<endl;
}
else
cout<<"no inputs!"<<endl;


return 0;
}
//10.14
auto f = [](int a, int b){return a + b;};  
    cout << f(5, 6) << endl;
//10.15
int p=10;
auto  f[p](int a){return a+p;}
cout<<f(6)<<endl;
//10.16


//10.17
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
class sales_data
{


public:
sales_data()=default;
sales_data(const string & s, unsigned i, double d):bookNo(s),units_sold(i),revenue(d){}
string isbn() const {return this->bookNo;}
void prints() const {cout<<bookNo<<' '<<units_sold<<' '<<revenue<<endl;}


private:
string bookNo;
unsigned units_sold=0;
double revenue=0.0;


};


int main()
{
vector<sales_data> vecSales;
sales_data vec1("002",2,22),vec2{"22",33,43},vec3{"22312",2,12};
vecSales.push_back(vec1);
vecSales.push_back(vec2);
vecSales.push_back(vec3);


for(auto &i :vecSales)
i.prints();


sort(vecSales.begin(),vecSales.end(),[=](sales_data & s1,sales_data & s2){return s1.isbn().size()<s2.isbn().size();});
for(auto &i :vecSales)
i.prints();






return 0;
}
//10.18
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
void elimDups(vector<string> & words)
{
sort(words.begin(),words.end());
auto end_unique=unique(words.begin(),words.end());
words.erase(end_unique,words.end());
}
void biggies( vector <string > & words, vector < string > ::size_type sz)
{
elimDups(words);
stable_sort(words.begin(),words.end(),[](const string & s1, const string & s2){return s1.size()<s2.size();});
auto wc=partition(words.begin(),words.end(),[sz](const string & s){return s.size()<sz;});
auto count=words.end()-wc;
cout<<"大于"<<sz<<"的单词有这么多个:"<<count<<endl;
for_each(wc,words.end(),[](const string & s){cout<<s<<' ';});
cout<<endl;
}




int main()
{
string word;
vector<string> vwords;
while(cin>>word)
{
vwords.push_back(word);
}
if(!vwords.empty())
{
biggies(vwords,4);
}
else
cout<<"no inputs!"<<endl;


return 0;
}
//10.19
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
void elimDups(vector<string> & words)
{
sort(words.begin(),words.end());
auto end_unique=unique(words.begin(),words.end());
words.erase(end_unique,words.end());
}
void biggies( vector <string > & words, vector < string > ::size_type sz)
{
elimDups(words);
stable_sort(words.begin(),words.end(),[](const string & s1, const string & s2){return s1.size()<s2.size();});
auto wc=stable_partition(words.begin(),words.end(),[sz](const string & s){return s.size()<sz;});
auto count=words.end()-wc;
cout<<"大于"<<sz<<"的单词有这么多个:"<<count<<endl;
for_each(wc,words.end(),[](const string & s){cout<<s<<' ';});
cout<<endl;
}




int main()
{
string word;
vector<string> vwords;
while(cin>>word)
{
vwords.push_back(word);
}
if(!vwords.empty())
{
biggies(vwords,4);
}
else
cout<<"no inputs!"<<endl;


return 0;
}
//10.20
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
#include<list>
int main()
{
vector<string>vec{"asdsadsa","xcc","eda","xzcxvccb","edd"};
int ans=count_if(vec.begin(),vec.end(),[](string s){return s.size()>=5});
cout<<ans<<endl;
}


//10.21
 int index = 7;  
    auto check_and_decrement = [&index]() { return -- index ? false : true;};  
    while(!check_and_decrement())  
        cout << index << " ";  
    cout << index << endl
//10.22
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
#include<list>
using namespace std;
bool hanshu(string &s)
{
if(s.size()>=6)
return true;
return false;
}
int main()
{
vector<string>vec;
string uu;
int q=10;
while(q--)
{
cin>>uu;
vec.push_back(uu);
}
int ans=count_if(vec.begin(),vec.end(),hanshu);
cout<<ans<<endl;
}
//10.23
不清楚- -
10.24
10.25
以后再做


//10.26
位置不同
//10.27
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
#include<list>
using namespace std;
void shuchu(int a)
{
cout<<a<<" ";
}
int main()
{
vector<int>vec;
int uu;
int q=10;
while(q--)
{
cin>>uu;
vec.push_back(uu);
}
list<int>bb;
unique_copy(vec.begin(),vec.end(),back_inserter(bb));
for_each(bb.begin(),bb.end(),shuchu);


}
//1028


#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
#include<list>
using namespace std;
void shuchu(int a)
{
cout<<a<<" ";
}
int main()
{
vector<int>vec;
int uu;
int q=10;
while(q--)
{
cin>>uu;
vec.push_back(uu);
}


    list<int>aa;
list<int>bb;
list<int>cc;
   unique_copy(vec.begin(),vec.end(),back_inserter(bb));
    unique_copy(vec.begin(),vec.end(),front_inserter(aa));
for_each(aa.begin(),aa.end(),shuchu);
for_each(bb.begin(),bb.end(),shuchu);






}
//10.29
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
#include<list>
using namespace std;
int main()
{
ifstream in("test.txt");
    istream_iterator<string> in_it(in);
istream_iterator<string> in_eof;
vector<string>vec;
copy(in_it,in_eof,back_inserter(vec));
copy(vec.begin(),vec.end(),ostream_iterator<string>(cout,"  "));
}
//10.30
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
#include<list>
using namespace std;
int main()
{


    istream_iterator<int> in_it(cin);
istream_iterator<int> eof;
vector<int> vec;
while(in_it!=eof)
{
vec.push_back(*in_it++);
}
sort(vec.begin(),vec.end());
copy(vec.begin(),vec.end(),ostream_iterator<int>(cout,"  "));
}
//10.31
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
#include<list>
using namespace std;
int main()
{


    istream_iterator<int> in_it(cin);
istream_iterator<int> eof;
vector<int> vec;
while(in_it!=eof)
{
vec.push_back(*in_it++);
}
sort(vec.begin(),vec.end());
unique_copy(vec.begin(),vec.end(),ostream_iterator<int>(cout,"  "));
}
下面这俩设计文件的没做
//10.32

//10.33

//10.34
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
#include<list>
using namespace std;
int main()
{


   
    vector<int>aa;


int q=5;
while(q--)
{
int t;
cin>>t;
aa.push_back(t);
}
vector<int>::reverse_iterator it1=aa.rbegin();
vector<int>::reverse_iterator it2=aa.rend();
    while(it1!=it2)
{
cout<<*it1<<endl;
++it1;
}
}
//10.35
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
#include<list>
using namespace std;
int main()
{


   
    vector<int>aa;


int q=5;
while(q--)
{
int t;
cin>>t;
aa.push_back(t);
}
vector<int>::iterator it1=aa.begin();
vector<int>::iterator it2=aa.end();
--it2;
    while(it1!=it2)
{
cout<<*it2<<endl;
--it2;
}
cout<<*it2<<endl;
}


//10.36
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
#include<list>
using namespace std;
int main()
{


   
    list<int>aa;


int q=10;
while(q--)
{
int t;
cin>>t;
aa.push_back(t);
}
list<int>::reverse_iterator it1=aa.rbegin();
list<int>::reverse_iterator it2=aa.rend();
 
cout<<*find(it1,it2,0)<<endl;
}


//10.37
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
#include<list>
using namespace std;
int main()
{


   int q=10;
    vector<int>a;
list<int>b;
while(q--)
{
int t;
cin>>t;
a.push_back(t);
}
copy(a.begin(),a.end(),front_inserter(b));
copy(b.begin(),b.end(),ostream_iterator<int>(cout,"  "));
}


//10.38,39,40,41

//10.42
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<numeric>
#include<list>
using namespace std;


void elimDups(list<string>&word)
{
word.sort();
list<string>::iterator it3=unique(word.begin(),word.end());
word.erase(it3,word.end());
}


int main()
{


list<string>a;
int n=5;
string t;
while(n--)
{
cin>>t;
a.push_back(t);
}
elimDups(a);
list<string>::iterator it1=a.begin();
list<string>::iterator it2=a.end();
while(it1!=it2)
{
cout<<*it1<<endl;
++it1;
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值