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