list<int> li{ 1,2,3,66,66,66,100 };
cout <<"The 66 count is:"
<<count(li.cbegin(),li.cend(),66)<< endl;
accumulate()
头文件:numeric 功能:将指定范围内的元素进行和运算,参数3为和运算的初始值 返回值:返回和运算的结果 注意:此函数操作的元素必须能够与+运算符进行操作
//计算li元素的和,和的初始值为0
list<int> li{ 1,2,3 };
cout <<"The sum is:" <<accumulate(li.cbegin(),li.cend(),0)<< endl; //6
使用string时,必须显示地调用,不能够直接使用字符串,因为这样会被accumulate函数认为是一个const char*对象而出错
//正确
ist<string> li{"A","B","C"};
cout <<accumulate(li.cbegin(),li.cend(),string("String:"))<< endl; //String:ABC
//错误
list<string> li{"A","B","C"};
cout <<accumulate(li.cbegin(),li.cend(),"String:")<< endl;
//正确
list<string> li{"A","B","C"};
string s = "String:";
cout <<accumulate(li.cbegin(),li.cend(), s)<< endl;
附加:如果想要进行别的运行,例如乘、除等,可以使用参数4.例如下面是对一个数组内的元素进行乘操作(备注:初始化不要填0,否则结果就为0)
int *p = new int[4] {1, 2, 3, 4};
cout << accumulate(p, p + 4, 1,multiplies<int>()) << endl; //24
equal()
功能:用来比较两个指定范围内的元素是否都是相同的值(常来比较两个元素是否相同) 参数:参数1和参数2指定一个容器的范围。参数3指定另一个容器的开始范围 比较规则:将参数1和2指定的范围内的所有元素,查看这些元素是否与参数3所指定的另一个容器的开始处是否都存在(不一定要个数都相同,只要容器1的元素在容器2中都要一一对应) 返回值:都相同返回1。不相同返回0 因为equal调用迭代器完成操作,所以equal可以用来比较两个不同类型的容器。例如vector<string>和list<const char*>可以进行比较
vector<int> vec1{ 1,2};
vector<int> vec2{ 1,2,3};
vector<int> vec3{ 1,2,3,4};
vector<int> vec4{ 1,2,3,4 };
cout << equal(vec1.cbegin(),vec1.cend(), vec4.cbegin())<< endl; //1
cout << equal(vec2.cbegin(), vec2.cend(), vec4.cbegin()) << endl; //1
cout << equal(vec3.cbegin(), vec3.cend(), vec4.cbegin()) << endl; //1
vector<int> vec1{ 2,3};
vector<int> vec2{ 1,2,3,4 };
cout << equal(vec1.cbegin(),vec1.cend(), vec2.cbegin())<< endl; //0
vector<string> vec1{ "A","B"};
vector<string> vec2{ "B" };
vector<const char*> vec3{ "A","B","C" };
cout << equal(vec1.cbegin(), vec1.cend(), vec3.cbegin()) << endl; //1
cout << equal(vec2.cbegin(), vec2.cend(), vec3.cbegin())<< endl; //0










