当前位置: 首页 > news >正文

建站平台取名字北京京西建设集团网站

建站平台取名字,北京京西建设集团网站,美食网站开发毕业设计的主要内容,建设公司网站大概需要多少钱?概述: 算法主要是由头文件algorithm functional numeric组成。 algorithm是所有STL头文件中最大的一个#xff0c;范围涉及到比较、 交换、查找、遍历操作、复制、修改等等 numeric体积很小#xff0c;只包括几个在序列上面进行简…概述: 算法主要是由头文件algorithm functional numeric组成。 algorithm是所有STL头文件中最大的一个范围涉及到比较、 交换、查找、遍历操作、复制、修改等等 numeric体积很小只包括几个在序列上面进行简单数学运算的模板函数 functional定义了一些模板类,用以声明函数对象。 一、常用遍历算法 学习目标 掌握常用的遍历算法 算法简介 for_each //遍历容器 transform //搬运容器到另一个容器中 1、for_each 功能描述 实现遍历容器 函数原型 for_each(iterator beg, iterator end, _func); // 遍历算法 遍历容器元素 // beg 开始迭代器 // end 结束迭代器 // _func 函数或者函数对象 示例 #include algorithm#include vector​//普通函数void print01(int val) {cout val ;}//函数对象class print02 {public:void operator()(int val) {cout val ;}};​//for_each算法基本用法void test01() {​vectorint v;for (int i 0; i 10; i) {v.push_back(i);}​//遍历算法for_each(v.begin(), v.end(), print01);cout endl;​for_each(v.begin(), v.end(), print02());cout endl;}​int main() {​test01();​system(pause);​return 0;} 总结for_each在实际开发中是最常用遍历算法需要熟练掌握 2、transform 功能描述 搬运容器到另一个容器中 函数原型 transform(iterator beg1, iterator end1, iterator beg2, _func); //beg1 源容器开始迭代器 //end1 源容器结束迭代器 //beg2 目标容器开始迭代器 //_func 函数或者函数对象 示例 #includevector#includealgorithm​//常用遍历算法 搬运 transform​class TransForm{public:int operator()(int val){return val;}​};​class MyPrint{public:void operator()(int val){cout val ;}};​void test01(){vectorintv;for (int i 0; i 10; i){v.push_back(i);}​vectorintvTarget; //目标容器​vTarget.resize(v.size()); // 目标容器需要提前开辟空间​transform(v.begin(), v.end(), vTarget.begin(), TransForm());​for_each(vTarget.begin(), vTarget.end(), MyPrint());}​int main() {​test01();​system(pause);​return 0;} 总结 搬运的目标容器必须要提前开辟空间否则无法正常搬运 二、常用查找算法 学习目标 掌握常用的查找算法 算法简介 find //查找元素 find_if //按条件查找元素 adjacent_find //查找相邻重复元素 binary_search //二分查找法 count //统计元素个数 count_if //按条件统计元素个数 1、find 功能描述 查找指定元素找到返回指定元素的迭代器找不到返回结束迭代器end() 函数原型 find(iterator beg, iterator end, value); // 按值查找元素找到返回指定位置迭代器找不到返回结束迭代器位置 // beg 开始迭代器 // end 结束迭代器 // value 查找的元素 示例 #include algorithm#include vector#include stringvoid test01() {​vectorint v;for (int i 0; i 10; i) {v.push_back(i 1);}//查找容器中是否有 5 这个元素vectorint::iterator it find(v.begin(), v.end(), 5);if (it v.end()) {cout 没有找到! endl;}else {cout 找到: *it endl;}}​class Person {public:Person(string name, int age) {this-m_Name name;this-m_Age age;}//重载bool operator(const Person p) {if (this-m_Name p.m_Name this-m_Age p.m_Age) {return true;}return false;}​public:string m_Name;int m_Age;};​void test02() {​vectorPerson v;​//创建数据Person p1(aaa, 10);Person p2(bbb, 20);Person p3(ccc, 30);Person p4(ddd, 40);​v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);​vectorPerson::iterator it find(v.begin(), v.end(), p2);if (it v.end()) {cout 没有找到! endl;}else {cout 找到姓名: it-m_Name 年龄: it-m_Age endl;}} 总结 利用find可以在容器中找指定的元素返回值是迭代器 2、find_if 功能描述 按条件查找元素 函数原型 find_if(iterator beg, iterator end, _Pred); // 按值查找元素找到返回指定位置迭代器找不到返回结束迭代器位置 // beg 开始迭代器 // end 结束迭代器 // _Pred 函数或者谓词返回bool类型的仿函数 示例 #include algorithm#include vector#include string​//内置数据类型class GreaterFive{public:bool operator()(int val){return val 5;}};​void test01() {​vectorint v;for (int i 0; i 10; i) {v.push_back(i 1);}​vectorint::iterator it find_if(v.begin(), v.end(), GreaterFive());if (it v.end()) {cout 没有找到! endl;}else {cout 找到大于5的数字: *it endl;}}​//自定义数据类型class Person {public:Person(string name, int age){this-m_Name name;this-m_Age age;}public:string m_Name;int m_Age;};​class Greater20{public:bool operator()(Person p){return p.m_Age 20;}​};​void test02() {​vectorPerson v;​//创建数据Person p1(aaa, 10);Person p2(bbb, 20);Person p3(ccc, 30);Person p4(ddd, 40);​v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);​vectorPerson::iterator it find_if(v.begin(), v.end(), Greater20());if (it v.end()){cout 没有找到! endl;}else{cout 找到姓名: it-m_Name 年龄: it-m_Age endl;}}​int main() {​//test01();​test02();​system(pause);​return 0;} 总结find_if按条件查找使查找更加灵活提供的仿函数可以改变不同的策略 3、adjacent_find 功能描述 查找相邻重复元素 函数原型 adjacent_find(iterator beg, iterator end); // 查找相邻重复元素,返回相邻元素的第一个位置的迭代器 // beg 开始迭代器 // end 结束迭代器 示例 #include algorithm#include vector​void test01(){vectorint v;v.push_back(1);v.push_back(2);v.push_back(5);v.push_back(2);v.push_back(4);v.push_back(4);v.push_back(3);​//查找相邻重复元素vectorint::iterator it adjacent_find(v.begin(), v.end());if (it v.end()) {cout 找不到! endl;}else {cout 找到相邻重复元素为: *it endl;}} 总结面试题中如果出现查找相邻重复元素记得用STL中的adjacent_find算法 4、binary_search 功能描述 查找指定元素是否存在 函数原型 bool binary_search(iterator beg, iterator end, value); // 查找指定的元素查到 返回true 否则false // 注意: 在无序序列中不可用 // beg 开始迭代器 // end 结束迭代器 // value 查找的元素 示例 #include algorithm#include vector​void test01(){vectorintv;​for (int i 0; i 10; i){v.push_back(i);}//二分查找bool ret binary_search(v.begin(), v.end(),2);if (ret){cout 找到了 endl;}else{cout 未找到 endl;}}​int main() {​test01();​system(pause);​return 0;} 总结二分查找法查找效率很高值得注意的是查找的容器中元素必须的有序序列 5、count 功能描述 统计元素个数 函数原型 count(iterator beg, iterator end, value); // 统计元素出现次数 // beg 开始迭代器 // end 结束迭代器 // value 统计的元素 示例 #include algorithm#include vector​//内置数据类型void test01(){vectorint v;v.push_back(1);v.push_back(2);v.push_back(4);v.push_back(5);v.push_back(3);v.push_back(4);v.push_back(4);​int num count(v.begin(), v.end(), 4);​cout 4的个数为 num endl;}​//自定义数据类型class Person{public:Person(string name, int age){this-m_Name name;this-m_Age age;}bool operator(const Person p){if (this-m_Age p.m_Age){return true;}else{return false;}}string m_Name;int m_Age;};​void test02(){vectorPerson v;​Person p1(刘备, 35);Person p2(关羽, 35);Person p3(张飞, 35);Person p4(赵云, 30);Person p5(曹操, 25);​v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);Person p(诸葛亮,35);​int num count(v.begin(), v.end(), p);cout num num endl;}int main() {​//test01();​test02();​system(pause);​return 0;} 总结 统计自定义数据类型时候需要配合重载 operator 6、count_if 功能描述 按条件统计元素个数 函数原型 count_if(iterator beg, iterator end, _Pred); // 按条件统计元素出现次数 // beg 开始迭代器 // end 结束迭代器 // _Pred 谓词 示例 #include algorithm#include vector​class Greater4{public:bool operator()(int val){return val 4;}};​//内置数据类型void test01(){vectorint v;v.push_back(1);v.push_back(2);v.push_back(4);v.push_back(5);v.push_back(3);v.push_back(4);v.push_back(4);​int num count_if(v.begin(), v.end(), Greater4());​cout 大于4的个数为 num endl;}​//自定义数据类型class Person{public:Person(string name, int age){this-m_Name name;this-m_Age age;}​string m_Name;int m_Age;};​class AgeLess35{public:bool operator()(const Person p){return p.m_Age 35;}};void test02(){vectorPerson v;​Person p1(刘备, 35);Person p2(关羽, 35);Person p3(张飞, 35);Person p4(赵云, 30);Person p5(曹操, 25);​v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);​int num count_if(v.begin(), v.end(), AgeLess35());cout 小于35岁的个数 num endl;}​​int main() {​//test01();​test02();​system(pause);​return 0;} 总结按值统计用count按条件统计用count_if 三、常用排序算法 学习目标 掌握常用的排序算法 算法简介 sort //对容器内元素进行排序 random_shuffle //洗牌 指定范围内的元素随机调整次序 merge // 容器元素合并并存储到另一容器中 reverse // 反转指定范围的元素 1、sort 功能描述 对容器内元素进行排序 函数原型 sort(iterator beg, iterator end, _Pred); // 按值查找元素找到返回指定位置迭代器找不到返回结束迭代器位置 // beg 开始迭代器 // end 结束迭代器 // _Pred 谓词 示例 #include algorithm#include vector​void myPrint(int val){cout val ;}​void test01() {vectorint v;v.push_back(10);v.push_back(30);v.push_back(50);v.push_back(20);v.push_back(40);​//sort默认从小到大排序sort(v.begin(), v.end());for_each(v.begin(), v.end(), myPrint);cout endl;​//从大到小排序sort(v.begin(), v.end(), greaterint());for_each(v.begin(), v.end(), myPrint);cout endl;}​int main() {​test01();​system(pause);​return 0;} 总结sort属于开发中最常用的算法之一需熟练掌握 2、random_shuffle 功能描述 洗牌 指定范围内的元素随机调整次序 函数原型 random_shuffle(iterator beg, iterator end); // 指定范围内的元素随机调整次序 // beg 开始迭代器 // end 结束迭代器 示例 #include algorithm#include vector#include ctime​class myPrint{public:void operator()(int val){cout val ;}};​void test01(){srand((unsigned int)time(NULL));vectorint v;for(int i 0 ; i 10;i){v.push_back(i);}for_each(v.begin(), v.end(), myPrint());cout endl;​//打乱顺序random_shuffle(v.begin(), v.end());for_each(v.begin(), v.end(), myPrint());cout endl;}​int main() {​test01();​system(pause);​return 0;} 总结random_shuffle洗牌算法比较实用使用时记得加随机数种子 3、merge 功能描述 两个容器元素合并并存储到另一容器中 函数原型 merge(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest); // 容器元素合并并存储到另一容器中 // 注意: 两个容器必须是有序的 // beg1 容器1开始迭代器 // end1 容器1结束迭代器 // beg2 容器2开始迭代器 // end2 容器2结束迭代器 // dest 目标容器开始迭代器 示例 #include algorithm#include vector​class myPrint{public:void operator()(int val){cout val ;}};​void test01(){vectorint v1;vectorint v2;for (int i 0; i 10 ; i) {v1.push_back(i);v2.push_back(i 1);}​vectorint vtarget;//目标容器需要提前开辟空间vtarget.resize(v1.size() v2.size());//合并 需要两个有序序列merge(v1.begin(), v1.end(), v2.begin(), v2.end(), vtarget.begin());for_each(vtarget.begin(), vtarget.end(), myPrint());cout endl;}​int main() {​test01();​system(pause);​return 0;} 总结merge合并的两个容器必须的有序序列 4、reverse 功能描述 将容器内元素进行反转 函数原型 reverse(iterator beg, iterator end); // 反转指定范围的元素 // beg 开始迭代器 // end 结束迭代器 示例 #include algorithm#include vector​class myPrint{public:void operator()(int val){cout val ;}};​void test01(){vectorint v;v.push_back(10);v.push_back(30);v.push_back(50);v.push_back(20);v.push_back(40);​cout 反转前 endl;for_each(v.begin(), v.end(), myPrint());cout endl;​cout 反转后 endl;​reverse(v.begin(), v.end());for_each(v.begin(), v.end(), myPrint());cout endl;}​int main() {​test01();​system(pause);​return 0;} 总结reverse反转区间内元素面试题可能涉及到 四、常用拷贝和替换算法 学习目标 掌握常用的拷贝和替换算法 算法简介 copy // 容器内指定范围的元素拷贝到另一容器中 replace // 将容器内指定范围的旧元素修改为新元素 replace_if // 容器内指定范围满足条件的元素替换为新元素 swap // 互换两个容器的元素 1、copy 功能描述 容器内指定范围的元素拷贝到另一容器中 函数原型 copy(iterator beg, iterator end, iterator dest); // 按值查找元素找到返回指定位置迭代器找不到返回结束迭代器位置 // beg 开始迭代器 // end 结束迭代器 // dest 目标起始迭代器 示例 #include algorithm#include vector​class myPrint{public:void operator()(int val){cout val ;}};​void test01(){vectorint v1;for (int i 0; i 10; i) {v1.push_back(i 1);}vectorint v2;v2.resize(v1.size());copy(v1.begin(), v1.end(), v2.begin());​for_each(v2.begin(), v2.end(), myPrint());cout endl;}​int main() {​test01();​system(pause);​return 0;} 总结利用copy算法在拷贝时目标容器记得提前开辟空间 2、replace 功能描述 将容器内指定范围的旧元素修改为新元素 函数原型 replace(iterator beg, iterator end, oldvalue, newvalue); // 将区间内旧元素 替换成 新元素 // beg 开始迭代器 // end 结束迭代器 // oldvalue 旧元素 // newvalue 新元素 示例 #include algorithm#include vector​class myPrint{public:void operator()(int val){cout val ;}};​void test01(){vectorint v;v.push_back(20);v.push_back(30);v.push_back(20);v.push_back(40);v.push_back(50);v.push_back(10);v.push_back(20);​cout 替换前 endl;for_each(v.begin(), v.end(), myPrint());cout endl;​//将容器中的20 替换成 2000cout 替换后 endl;replace(v.begin(), v.end(), 20,2000);for_each(v.begin(), v.end(), myPrint());cout endl;}​int main() {​test01();​system(pause);​return 0;} 总结replace会替换区间内满足条件的元素 3、replace_if 功能描述: 将区间内满足条件的元素替换成指定元素 函数原型 replace_if(iterator beg, iterator end, _pred, newvalue); // 按条件替换元素满足条件的替换成指定元素 // beg 开始迭代器 // end 结束迭代器 // _pred 谓词 // newvalue 替换的新元素 示例 #include algorithm#include vector​class myPrint{public:void operator()(int val){cout val ;}};​class ReplaceGreater30{public:bool operator()(int val){return val 30;}​};​void test01(){vectorint v;v.push_back(20);v.push_back(30);v.push_back(20);v.push_back(40);v.push_back(50);v.push_back(10);v.push_back(20);​cout 替换前 endl;for_each(v.begin(), v.end(), myPrint());cout endl;​//将容器中大于等于的30 替换成 3000cout 替换后 endl;replace_if(v.begin(), v.end(), ReplaceGreater30(), 3000);for_each(v.begin(), v.end(), myPrint());cout endl;}​int main() {​test01();​system(pause);​return 0;} 总结replace_if按条件查找可以利用仿函数灵活筛选满足的条件 4、swap 功能描述 互换两个容器的元素 函数原型 swap(container c1, container c2); // 互换两个容器的元素 // c1容器1 // c2容器2 示例 #include algorithm#include vector​class myPrint{public:void operator()(int val){cout val ;}};​void test01(){vectorint v1;vectorint v2;for (int i 0; i 10; i) {v1.push_back(i);v2.push_back(i100);}​cout 交换前 endl;for_each(v1.begin(), v1.end(), myPrint());cout endl;for_each(v2.begin(), v2.end(), myPrint());cout endl;​cout 交换后 endl;swap(v1, v2);for_each(v1.begin(), v1.end(), myPrint());cout endl;for_each(v2.begin(), v2.end(), myPrint());cout endl;}​int main() {​test01();​system(pause);​return 0;} 总结swap交换容器时注意交换的容器要同种类型 五、常用算术生成算法 学习目标 掌握常用的算术生成算法 注意 算术生成算法属于小型算法使用时包含的头文件为 #include numeric 算法简介 accumulate // 计算容器元素累计总和 fill // 向容器中添加元素 1、accumulate 功能描述 计算区间内 容器元素累计总和 函数原型 accumulate(iterator beg, iterator end, value); // 计算容器元素累计总和 // beg 开始迭代器 // end 结束迭代器 // value 起始值 示例 #include numeric#include vectorvoid test01(){vectorint v;for (int i 0; i 100; i) {v.push_back(i);}​int total accumulate(v.begin(), v.end(), 0);​cout total total endl;}​int main() {​test01();​system(pause);​return 0;} 总结accumulate使用时头文件注意是 numeric这个算法很实用 2、fill 功能描述 向容器中填充指定的元素 函数原型 fill(iterator beg, iterator end, value); // 向容器中填充元素 // beg 开始迭代器 // end 结束迭代器 // value 填充的值 示例 #include numeric#include vector#include algorithm​class myPrint{public:void operator()(int val){cout val ;}};​void test01(){​vectorint v;v.resize(10);//填充fill(v.begin(), v.end(), 100);​for_each(v.begin(), v.end(), myPrint());cout endl;}​int main() {​test01();​system(pause);​return 0;} 总结利用fill可以将容器区间内元素填充为 指定的值 六、常用集合算法 学习目标 掌握常用的集合算法 算法简介 set_intersection // 求两个容器的交集 set_union // 求两个容器的并集 set_difference // 求两个容器的差集 1、set_intersection 功能描述 求两个容器的交集 函数原型 set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest); // 求两个集合的交集 // 注意:两个集合必须是有序序列 // beg1 容器1开始迭代器 // end1 容器1结束迭代器 // beg2 容器2开始迭代器 // end2 容器2结束迭代器 // dest 目标容器开始迭代器 示例 #include vector#include algorithm​class myPrint{public:void operator()(int val){cout val ;}};​void test01(){vectorint v1;vectorint v2;for (int i 0; i 10; i){v1.push_back(i);v2.push_back(i5);}​vectorint vTarget;//取两个里面较小的值给目标容器开辟空间vTarget.resize(min(v1.size(), v2.size()));​//返回目标容器的最后一个元素的迭代器地址vectorint::iterator itEnd set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());​for_each(vTarget.begin(), itEnd, myPrint());cout endl;}​int main() {​test01();​system(pause);​return 0;} 总结 求交集的两个集合必须的有序序列 目标容器开辟空间需要从两个容器中取小值 set_intersection返回值既是交集中最后一个元素的位置 2、set_union 功能描述 求两个集合的并集 函数原型 set_union(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest); // 求两个集合的并集 // 注意:两个集合必须是有序序列 // beg1 容器1开始迭代器 // end1 容器1结束迭代器 // beg2 容器2开始迭代器 // end2 容器2结束迭代器 // dest 目标容器开始迭代器 示例 #include vector#include algorithm​class myPrint{public:void operator()(int val){cout val ;}};​void test01(){vectorint v1;vectorint v2;for (int i 0; i 10; i) {v1.push_back(i);v2.push_back(i5);}​vectorint vTarget;//取两个容器的和给目标容器开辟空间vTarget.resize(v1.size() v2.size());​//返回目标容器的最后一个元素的迭代器地址vectorint::iterator itEnd set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());​for_each(vTarget.begin(), itEnd, myPrint());cout endl;}​int main() {​test01();​system(pause);​return 0;} 总结 求并集的两个集合必须的有序序列 目标容器开辟空间需要两个容器相加 set_union返回值既是并集中最后一个元素的位置 3、set_difference 功能描述 求两个集合的差集 函数原型 set_difference(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest); // 求两个集合的差集 // 注意:两个集合必须是有序序列 // beg1 容器1开始迭代器 // end1 容器1结束迭代器 // beg2 容器2开始迭代器 // end2 容器2结束迭代器 // dest 目标容器开始迭代器 示例 #include vector#include algorithm​class myPrint{public:void operator()(int val){cout val ;}};​void test01(){vectorint v1;vectorint v2;for (int i 0; i 10; i) {v1.push_back(i);v2.push_back(i5);}​vectorint vTarget;//取两个里面较大的值给目标容器开辟空间vTarget.resize( max(v1.size() , v2.size()));​//返回目标容器的最后一个元素的迭代器地址cout v1与v2的差集为 endl;vectorint::iterator itEnd set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());for_each(vTarget.begin(), itEnd, myPrint());cout endl;​​cout v2与v1的差集为 endl;itEnd set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), vTarget.begin());for_each(vTarget.begin(), itEnd, myPrint());cout endl;}​int main() {​test01();​system(pause);​return 0;} 总结 求差集的两个集合必须的有序序列 目标容器开辟空间需要从两个容器取较大值 set_difference返回值既是差集中最后一个元素的位置
http://www.zqtcl.cn/news/210643/

相关文章:

  • 找网站建设公司需要注意什么常州网站建设公司好么
  • 不备案的网站很慢网站双线主机优势
  • 南京电子商务网站建设23个营销专业术语
  • 建设银行官网官方网站学习网页制作的网站
  • 开发网站需要什么硬件今年最流行的装修风格
  • 门户网站建设中标结果百度资讯指数
  • 定制企业网站开发公司网站建设的6个基本步骤
  • 网站建设与维护案列网站作品怎么做
  • 茂名放心营销网站开发seo收费
  • 旅游网站品牌建设本地使用宝塔安装wordpress
  • 专门做外链的网站制作论坛类网站模板免费下载
  • 靖江建设行业协会网站投资做网站
  • 做网站视频背景潍坊网站制作建设
  • 深圳市官网网站建设哪家好百度抓取网站登录
  • 免费做cpa单页网站友情链接买卖代理
  • 免费网站建站排名中国最大的软件公司
  • 码云pages做静态网站广西建设培训网
  • 建设网站需要花钱吗网站seo方案策划书
  • 德阳网站怎么做seo陈木胜个人资料
  • 电子规划书商务网站建设wordpress主机推荐
  • wordpress设置多站点html5开发手机app
  • 移动互联和网站开发哪个好做推广便宜的网站有哪些
  • 极速网站建设定制价格微信公众号运营助手
  • .net制作网站开发教程在线修图编辑器
  • 哪些网站可以做详情页聊城高新区建设局网站
  • 湖南网站优化代运营山东建设厅证件查询网址
  • 以百度云做网站空间浙江外贸网站建设
  • 南通网站建设推广专家wordpress 信息流 主题
  • 网站培训机构有哪些大学生做企业网站
  • 网站培训班有哪些课程做的好的大学生旅行有哪些网站好