您的位置:首页 > 编程语言 > C语言/C++

C++Primer第五版 第十章习题答案(1~10)

2017-02-26 09:38 465 查看
1:知识点:泛型算法:算法是因为其实现了一些经典算法的公共接口,排序和搜索。泛型是因为他们可以作用于不同类型的元素和多种容器类型甚至是内置数组。故称泛型算法

知识点2:基本上都定义在algorithm和numeric两个头文件中

知识点3:这些算法一般情况下只作用于迭代器之上,不对容器进行直接操作

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

int main(int argc, char**argv)
{
int a[10] = {0,1,2,5,4,5,4,5,4,5};
vector<int> vec(a,a+10);
int value = 5;
cout<<value<<"出现的次数为:"<<count(vec.begin(),vec.end(),value)<<endl;

return 0;
}


2:知识点:所谓泛型算法就是作用于容器和元素上面的一些操作的合集,在实际情况中要善于使用

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

int main(int argc, char**argv)
{
string a[10] = {"ds","das","123","123","123","123","123","123","123","123"};
list<string> list1(a,a+10);
string value = "123";
cout<<"字符串“"<<value<<"”出现的次数为:"<<count(list1.begin(),list1.end(),value)<<endl;

return 0;
}


3:知识点:标准库基本上都是对一个范围内的容器进行操作,所以参数中总会有两个表示范围的迭代器

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

int main(int argc, char**argv)
{
int a[10] = {0,1,2,5,4,5,4,5,4,5};
vector<int> vec(a,a+10);
cout<<"元素之和为:"<<accumulate(vec.begin(),vec.end(),0);

return 0;
}

4:将初值设定为0,表明返回值为int类型,使用之后,会将double转换为int,损失精度

5:一切正常,但是C风格字符串的比较最好还是利用strcmp()

6:知识点1:用一个单一迭代器表示第二个序列的算法都假定第二个序列和第一个序列等长,如果实际中不等长,程序会出现错误

知识点2:fill()算法的使用必须保证容器本身有足够的大小

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

int main(int argc, char**argv)
{
int a[10] = {0,1,2,5,4,5,4,5,4,5};
vector<int> vec(a,a+10);
cout<<"修改前:";
for(int i = 0; i<10 ;++i)
{
cout<<vec[i];
}
cout<<endl;
fill_n(vec.begin(),vec.size(),0);//注意其三个参数的意义
cout<<"修改后:";
for(int i = 0; i<10 ;++i)
{
cout<<vec[i];
}

return 0;
}


7:
(a):lst和vec之间的大小未保证相同,vec.resize(lst.size)

(b):reverse是改变容器容量的,并没有改变其大小,用resize()

8:算法只是产生了一个插入迭代器,然后使用这个迭代器进行插入操作。

9:

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

void elimDups(vector<string> &s)
{
cout<<"排序前:";
for (int i = 0; i<s.size(); ++i)
{
cout<<s[i]<<" ";
}
cout<<endl<<"sort()排序后:";
sort(s.begin(),s.end());//sort排序
for (int i = 0; i<s.size(); ++i)
{
cout<<s[i]<<" ";
}
cout<<endl<<"unique()排序后:";
vector<string>::iterator str = unique(s.begin(),s.end());//unique排序
for (int i = 0; i<s.size(); ++i)
{
cout<<s[i]<<" ";
}
cout<<endl<<"erase()操作后:";
s.erase(str,s.end());//erase()操作
for (int i = 0; i<s.size(); ++i)
{
cout<<s[i]<<" ";
}

}
int main(int argc, char**argv)
{
string a[10] = {"because","I","Like","Like","C++","very","very","much","that's","why"};
vector<string> s(a,a+10);
elimDups(s);

return 0;
}


10:因为这些算法只作用于迭代器,而不直接对容器进行操作.P343页note

本阶段所学到的一些泛型算法:find()搜索,accmulate()求和,equal()相等判断,fill()、fill_n()赋值,back_insert()插入操作,copy()拷贝,sort()排序,unique()重排并消重复
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息