//泛型算法本身不会执行容器的操作,它们只会运行于迭代器之上,执行迭代器的操作
//算法永远不会改变底层容器的大小。
cout << "==================只读算法================" << endl;
vector<int> vec{ 9,8,7,6,5,4,3,2,1,0 };
auto ip = find(vec.begin(), vec.end(), 4);//find 返回指向元素的迭代器
cout << *ip << endl;
auto num = count(vec.begin(), vec.end(), 6);//返回数量
cout << "num = " << num << endl;
auto sum = accumulate(vec.begin(), vec.end(), 0);//对容器内元素求和,第三个参数为和的初始值,只有定义+运算符的类型可以使用,char不能使用
cout << "sum = " << sum << endl;
vector<int> vec2{ 9,8,7,6,5,4,3 };
auto issam = equal(vec2.begin(), vec2.end(), vec.begin());//判断两个序列是否保存相同的值,后边容器的元素数量最少要等于前边的元素数量
cout << "issam = " << issam << endl;//输出。 如果所有对应的元素都相等返回true 否则返回false,对应下标的相等就可以
cout << "=======================写容器算法==============" << endl;
vector<int> vec3{1,2,3,4,5,6,7,8,9};
fill(vec3.begin(), vec3.end(), 7);//讲指定范围内的元素赋值,第三个参数为要赋的值
show(vec3);
fill_n(vec3.begin()+1, 5, 8);//在指定开始的位置,对容器赋n个值,第二个参数为个数,第三个参数为要赋的值
show(vec3);
int a1[]{ 1,2,3,4,5,6,7,8,9,0 };
int a2[sizeof(a1) / sizeof(*a1)];
auto ret = copy(begin(a1), end(a1), a2);//拷贝算。返回a2的尾后迭代器
replace(vec3.begin(), vec3.end(), 8, 6);//将容器中指定的值改成另一个值
show(vec3);
vector<int> vec4;
replace_copy(vec3.begin(), vec3.end(), back_inserter(vec4), 6, 9);//保持vec3中的元素不变,将元素拷贝到vec4,并替换指定的值
show(vec3);
show(vec4);
cout << "=======================重排容器元素==============" << endl;
vector<int> vec5{ 3,6,8,5,8,2,7,8,8,1,9 };//升序排序容器内元素
sort(vec5.begin(), vec5.end());
show(vec5);
auto iep = unique(vec5.begin(), vec5.end());//将重复的元素放到最后,只有相邻的才有效,返回最后一个不重复的迭代器
show(vec5);