zoukankan      html  css  js  c++  java
  • C++Primer第五版——习题答案详解(九)


    习题答案目录:https://www.cnblogs.com/Mered1th/p/10485695.html

    第10章 泛型算法


    练习10.1

    #include<iostream>
    #include<algorithm>
    #include<vector>
    
    using namespace std;
    
    int main() {
    	int t, n;
    	vector<int> vec;
    	cout << "请输入序列个数:" << endl;
    	cin >> n;
    	cout << "请输入序列:" << endl;
    	for (int i = 0;i < n;i++) {
    		cin >> t;
    		vec.push_back(t);
    	}
    	cout << "请输入要统计的值:" << endl;
    	int num;
    	cin >> num;
    	cout << count(vec.begin(), vec.end(), num) << endl;
    	
    
    	system("pause");
    	return 0;
    }
    

    练习10.2

    #include<iostream>
    #include<algorithm>
    #include<list>
    #include<string>
    
    using namespace std;
    
    int main() {
    	int n;
    	string t;
    	list<string> lst;
    	cout << "请输入字符串个数:" << endl;
    	cin >> n;
    	cout << "请输入" << n << "个字符串:" << endl;
    	for (int i = 0;i < n;i++) {
    		cin >> t;
    		lst.push_back(t);
    	}
    	cout << "请输入要统计的字符串:" << endl;
    	string num;
    	cin >> num;
    	cout << count(lst.begin(), lst.end(), num) << endl;
    
    	system("pause");
    	return 0;
    }
    

    练习10.3

    #include<iostream>
    #include<numeric>
    #include<vector>
    
    using namespace std;
    
    int main() {
    	vector<int> vec = { 1,2,3,4,5 };
    	int sum = accumulate(vec.begin(), vec.end(), 0);
    	cout << sum << endl;
    	return 0;
    }
    

    练习10.4
    初始值设为0表示返回值为int类型,会有精度损失

    练习10.5
    equal会比较指针地址,而不是字符串值,比较的结果与string类型的不一致。

    练习10.6

    fill_n(vec.begin(),vec.size(),0);
    

    练习10.7
    a.lst和vec之间的大小未保证相同,vec.resize(lst.size)
    b.vec.resize(10);

    练习10.9

    #include<iostream>
    #include<numeric>
    #include<vector>
    #include<algorithm>
    #include<string>
    using namespace std;
    
    void elimDups(vector<string> &words) {
    	sort(words.begin(), words.end());
    	auto end_unique = unique(words.begin(), words.end());
    	cout << "unique后:";
    	for (auto i : words) {
    		cout << i << " ";
    	}
    	cout << endl;
    	cout << "erase后:";
    	words.erase(end_unique, words.end());
    	for (auto i : words) {
    		cout << i << " ";
    	}
    	cout << endl;
    }
    
    int main() {
    	vector<string> words = { "abc","abc","abc","bcd","efg","bcd","eqd" };
    	elimDups(words);
    	system("pause");
    	return 0;
    }
    

    练习10.10
    标准库算法对迭代器而不是容器进行操作。

    练习10.11

    #include<iostream>
    #include<numeric>
    #include<vector>
    #include<algorithm>
    #include<string>
    using namespace std;
    
    bool isShorter(const string &s1, const string &s2) {
    	return s1.size() < s2.size();
    }
    
    void elimDups(vector<string> &words) {
    	sort(words.begin(), words.end());
    	auto end_unique = unique(words.begin(), words.end());
    	words.erase(end_unique, words.end());
    }
    
    int main() {
    	vector<string> words = { "the","quick","red","fox","jumps","over","the","slow","red","turtle" };
    	elimDups(words);
    	stable_sort(words.begin(), words.end(), isShorter);
    	for (auto &i : words) {
    		cout << i << " ";
    	}
    	cout << endl;
    	system("pause");
    	return 0;
    }
    

    练习10.12

    bool compareIsbn(const Sales_data &a, const Sales_data &b) {
            return a.isbn() < b.isbn();
    }
    

    练习10.13

    #include<iostream>
    #include<numeric>
    #include<vector>
    #include<algorithm>
    #include<string>
    using namespace std;
    
    bool cmp(const string &a) {
    	return a.size() >= 5;
    }
    
    int main() {
    	vector<string> words = { "the","quick","red","fox","jumps","over","the","slow","red","turtle" };
    	partition(words.begin(), words.end(), cmp);
    	for (auto &i : words) {
    		cout << i << " ";
    	}
    	cout << endl;
    	system("pause");
    	return 0;
    }
    

    练习10.14

    #include<iostream>
    using namespace std;
    int main() {
    	auto f = [](int a,int b) {return a + b;};
    	cout << f(1, 2) << endl;
    	return 0;
    }
    

    练习10.15

    #include<iostream>
    using namespace std;
    
    int main() {
    	int a = 1;
    	auto f = [a](int b) {return a + b;};
    	cout << f(2) << endl;
    	
    	system("pause");
    	return 0;
    }
    

    练习10.16

    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    vector<string> &elimDups(vector<string> &words)
    {
    	sort(words.begin(), words.end());
    	auto end_unique = unique(words.begin(), words.end());
    	words.erase(end_unique, words.end());
    	return words;
    }
    
    void biggies(vector<string> &words, vector<string>::size_type sz)
    {
    	elimDups(words);
    	stable_sort(words.begin(), words.end(),
    		[](const string &a, const string &b)
    			{ return a.size() < b.size(); });
    	auto wc = find_if(words.begin(), words.end(),
    		[sz](const string &a)
    			{ return a.size() >= sz; });
    	auto count = words.end() - wc;
    	cout << count << endl;
    	for(const auto s : words)
    		cout << s << " ";
    	cout << endl;
    }
    
    int main()
    {
    	vector<string> vs = { "the","quick","red","fox","jumps","over","the","slow","red","turtle" };
    
    	biggies(vs, 5);
    
    	return 0;
    }
    

    练习 10.18-10.19

    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    vector<string> &elimDups(vector<string> &words)
    {
    	sort(words.begin(), words.end());
    	auto end_unique = unique(words.begin(), words.end());
    	words.erase(end_unique, words.end());
    	return words;
    }
    
    void biggies(vector<string> &words, vector<string>::size_type sz)
    {
    	elimDups(words);
    	auto wc = partition(words.begin(), words.end(),
    		[sz](const string &a)
    	{ return a.size() >= sz; });
        
    //auto wc = stable_partition(words.begin(), words.end(),
    //[sz](const string &a)
    //{ return a.size() >= sz; });
    
    	auto count = words.end() - wc;
    	cout << count << endl;
    	for (const auto s : words)
    		cout << s << " ";
    	cout << endl;
    }
    
    int main()
    {
    	vector<string> vs = { "the","quick","red","fox","jumps","over","the","slow","red","turtle" };
    
    	biggies(vs, 5);
    	system("pause");
    	return 0;
    }
    

    练习10.20

    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    int main()
    {
    	vector<string> words = { "the","quick","red","fox","jumps","over","the","slow","red","turtle" };
    	string::size_type sz = 6;
    	auto wc = count_if(words.begin(), words.end(),
    		[sz](const string &a)
    	{ return a.size() >= sz; });
    	cout << wc << endl;
    	system("pause");
    	return 0;
    }
    

    练习10.21

    #include<iostream>
    #include<algorithm>
    
    using namespace std;
    
    int main() {
    	int v = 5;
    	auto f = [&v]()->bool
    	{
    		if (v <= 0) return false;
    		else {
    			--v;
    			return true;
    		}
    	};
    	while (f()) {
    		cout << v << endl;
    	}
    	system("pause");
    	return 0;
    }
    

    练习10.22

    #include<iostream>
    #include<algorithm>
    #include<vector>
    #include<string>
    #include<functional>
    
    using namespace std;
    
    bool judge_size(string &s, string::size_type sz) {
    	return s.size() >= sz;
    }
    
    int main() {
    	vector<string> words = { "the","quick","red","fox","jumps","over","the","slow","red","turtle" };
    	cout << count_if(words.begin(), words.end(), bind(judge_size, placeholders::_1, 6)) << endl;
    
    	system("pause");
    	return 0;
    }
    

    练习10.23

    假设要绑定的函数有n个参数,绑定取n + 1个参数。另外一个是函数本身的绑定。

    练习10.24

    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <functional>
    
    using namespace std;
    bool check_size(string &s, int sz)
    {
    	return s.size() < sz;
    }
    
    int main()
    {
    	vector<int> vi = { 1,2,3,4,5,6 };
    	string s("aaaa");
    
    	auto iter = find_if(vi.begin(), vi.end(), bind(check_size, s, placeholders::_1));
    
    	cout << *iter << endl;
    	system("pause");
    	return 0;
    }
    

    练习10.25

    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <functional>
    
    using namespace std;
    
    vector<string> &elimDups(vector<string> &words)
    {
    	sort(words.begin(), words.end());
    	auto end_unique = unique(words.begin(), words.end());
    	words.erase(end_unique, words.end());
    	return words;
    }
    
    bool check_size(const string &s, string::size_type sz)
    {
    	return s.size() >= sz;
    }
    
    int main()
    {
    	vector<string> vs = { "the","quick","red","fox","jumps","over","the","slow","red","turtle" };
    
    	auto iter = partition(vs.begin(), vs.end(), bind(check_size, placeholders::_1, 5));
    	for (const auto s : vs)
    		cout << s << " ";
    	cout << endl;
    
    	vs.erase(iter, vs.end());
    	for (const auto s : vs)
    		cout << s << " ";
    	cout << endl;
    	system("pause");
    	return 0;
    }
    

    后续部分之后再更新。。

  • 相关阅读:
    sublime text 4 vim 插件配置
    ssh-keygen 的使用
    distribution transaction solution
    bilibili 大数据 视频下载 you-get
    Deepin 20.2.1 安装 MS SQL 2019 容器版本
    【转】使用Linux下Docker部署MSSQL并加载主机目录下的数据库
    【转】You Can Now Use OneDrive in Linux Natively Thanks to Insync
    dotnet 诊断工具安装命令
    Linux 使用 xrandr 设置屏幕分辨率
    【转】CentOS 7.9 2009 ISO 官方原版镜像下载
  • 原文地址:https://www.cnblogs.com/Mered1th/p/10574615.html
Copyright © 2011-2022 走看看