2018.10.16——第十章-10.1概述-10.2初識泛型演算法
阿新 • • 發佈:2018-12-15
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