1. 程式人生 > >2018.10.16——第十章-10.1概述-10.2初識泛型演算法

2018.10.16——第十章-10.1概述-10.2初識泛型演算法

10.1

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
	int val = 1;
	vector<int> v1 = {1, 2, 3, 1, 1, 2, 8, 7, 1, 1};
	cout << count(v1.cbegin(), v1.cend(), val) << endl;
	return 0;
}

答案

#include <iostream>
#include <vector>
#include <fstream>
#include <algorithm>

using namespace std;

int main(int argc, char *argv[])
{
	ifstream in(argv[1]);
	if (!in)
	{
		cerr << "無法開啟檔案" << endl;
		exit(1);
	}
	vector<int> vi;
	int val;
	while(in >> val)
		vi.push_back(val);
	cout << "輸入要搜尋的數:" ;
		cin >> val;
	cout << "序列中包含" << count(vi.begin(), vi.end(), val) << "個" << val;
	return 0;
}

10.2

#include <iostream>
#include <list>
#include <fstream>
#include <string>
#include <algorithm>

using namespace std;

int main(int argc, char *argv[])
{
	ifstream in(argv[1]);
	if (!in)
	{
		cerr << "無法開啟檔案" << endl;
		exit(1);
	}
	list<string> sl;
	string val;
	while(in >> val)
		sl.push_back(val);
	cout << "輸入要搜尋的字串:" ;
		cin >> val;
	cout << "序列中包含" << count(sl.begin(), sl.end(), val) << "個" << val;
	return 0;
}

答案同上

10.3

#include <iostream>
#include <vector>
#include <numeric>

using namespace std;

int main(int argc, char * argv[])
{
	ifstream in(argv[1]);
	if (!in)
	{
		cerr << "無法開啟檔案" << endl;
		exit(1);
	}
	int val;
	vector<int> vi;
	while(in >> val)
		vi.push_back(val);
	cout << "和為:" << accumulate(vi.cbegin(), vi.cend, 0) << endl;
	return 0;
}

答案同上

10.4 double型別在轉換成int型別時,會捨棄小數部分,最後導致結果不正確 答案的 accumulat的第三個引數是和的初值,它決定了函式的返回型別,以及函式中使用哪個加法運算子. 因此,本題中的呼叫是錯誤的,第三個引數0告知accumulat,和是整型,使用整型加法運算子。 正確的呼叫方法是將0.0作為第三個引數傳遞給accumulat.

10.5 答案 equal使用= =運算子比較兩個序列中的元素.string類過載了= =,可比較倆個字串是否長度相等且其中元素對位相等.而C風格字串本質是char 型別,用= =比較倆個char物件,只是檢查倆個指標值是否相等,即地址是否相等,而不比較其中字元是否相等。所以,只有當倆個序列中的指標都指向相同的地址時,equal才會返回true。否則,即使內容一樣,也會false