• 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;
    }
    

    后续部分之后再更新。。

  • 相关阅读:
    HDU
    【JZOJ1252】【洛谷P5194】天平【搜索】
    【JZOJ1252】【洛谷P5194】天平【搜索】
    【JZOJ3896】战争游戏【割点】
    【JZOJ3896】战争游戏【割点】
    【JZOJ3895】数字对【ST表】
    【JZOJ3895】数字对【ST表】
    【JZOJ3894】改造二叉树【树】【LIS】
    【JZOJ3894】改造二叉树【树】【LIS】
    【洛谷P4014】【网络流24题】分配问题【费用流】
  • 原文地址:https://www.cnblogs.com/Mered1th/p/10574615.html
Copyright © 2020-2023  润新知