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

南昌建设医院网站怎么建网站做淘宝客

南昌建设医院网站,怎么建网站做淘宝客,html5设计网页代码,邮政招c1驾驶员8000元文章目录 一、标准模板库STL二、容器算法迭代器应用1、遍历容器中整型数据2、遍历容器中自定义数据类型3、容器中嵌套容器 三、string容器1、构造函数2、赋值操作3、字符串拼接4、查找和替换5、字符串比较6、字符访问与存取7、插入和删除8、子串 四、vector容器1、构造函数2、赋… 文章目录 一、标准模板库STL二、容器算法迭代器应用1、遍历容器中整型数据2、遍历容器中自定义数据类型3、容器中嵌套容器 三、string容器1、构造函数2、赋值操作3、字符串拼接4、查找和替换5、字符串比较6、字符访问与存取7、插入和删除8、子串 四、vector容器1、构造函数2、赋值操作3、容量和大小4、插入和删除5、数据存取6、容器互换7、预留空间 五、deque容器1、构造函数2、赋值操作3、大小操作4、插入和删除5、数据存取6、排序 六、评委打分案例 一、标准模板库STL C面向对象(封装、继承、多态)和泛型编程(模板)的思想就是提升代码的复用性。大多数情况下数据结构和算法都未能有一套标准为了建立这样的标准出现了STL。 STL全称是Standard Template Library即标准模板库。 STL从广义上分为容器、算法、迭代器容器和算法之间通过迭代器无缝衔接。STL几乎所有的代码都采用了模板类或者模板函数。 STL的六大组件容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器。 容器各种数据结构如string、vector、list、deque、set、map等用来存放数据。 算法各种常用的算法如sort、find、copy、for_each等。 迭代器扮演了容器与算法之间的胶合剂。 仿函数行为类似函数可作为算法的某种策略。 适配器一种用来修饰容器或者仿函数或迭代器接口的东西。 空间配置器负责空间的配置与管理。 容器就是将运用最广泛的一些数据结构实现出来。常用的数据结构数组链表树栈队列集合映射表等这些容器分为序列式容器和关联式容器。序列式容器强调值的排序序列式容器中的每个元素均有固定的位置。关联式容器基于二叉树结构各元素之间没有严格的物理上的顺序关系。 算法用于解决逻辑或数学上的问题其分为质变算法和非质变算法。质变算法是指运算过程中会更改区间内的元素的内容例如拷贝、替换、删除等。非质变算法是指运算过程中不会更改区间内的元素内容例如查找、计数、遍历、寻找极值等。 迭代器是容器和算法之间粘合剂其提供一种方法使之能够依序寻访某个容器所含的各个元素而又无需暴露该容器的内部表示方式。每个容器都有专属的迭代器迭代器使用非常类似于指针。 迭代器的种类功能支持运算输入迭代器对数据的只读访问、、输出迭代器对数据的只写访问前向迭代器读写操作能向前推进迭代器、、双向迭代器读写操作能向前向后推进迭代器、- -随机访问迭代器读写操作可以以跳跃的方式访问任意数据、- -、[n]、-n、、、、 双向迭代器和随机访问迭代器是较为常用的两种。 二、容器算法迭代器应用 1、遍历容器中整型数据 STL中最常用的容器是vector可以将其理解为数组下面通过代码向容器中插入数据并遍历这个容器。 涉及到的容器vector算法for_each迭代器vector::iterator。 容器、算法、迭代器的简单应用示例如下。 #include iostream #include vector //包含vector头文件 #include algorithm //包含标准算法头文件 using namespace std;void print(int value) //for_each的回调函数 {coutvalueendl; }void fun() {//1.创建vector容器vectorint v;//2.向容器中插入数据v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);v.push_back(5);//3.通过迭代器遍历容器//方法一遍历——while循环//vectorint::iterator it_begin v.begin(); //起始迭代器指向容器中的第一个元素//vectorint::iterator it_end v.end(); //结束迭代器指向容器中最后一个元素的下一个位置//while(it_begin ! it_end)//{// cout*it_beginendl; //*it_begin解引用得到的数据类型与容器定义的数据类型一致// it_begin;//}//方法二遍历——for循环//for(vectorint::iterator i v.begin();i!v.end();i)//{// cout*iendl;//}//方法三遍历——需要包含算法头文件和回调函数for_each(v.begin(),v.end(),print); }int main() {fun();system(pause);return 0; }上面代码中push_back()函数用于向容器中插入数据采用的是尾插法begin()函数用于返回容器中第一个数据的位置end()函数用于返回容器中最后一个数据的下一个位置。 上面程序的运行结果如下图所示。 2、遍历容器中自定义数据类型 遍历容器中自定义数据类型的示例如下。 #include iostream #include vector //包含vector头文件 #include algorithm //包含标准算法头文件 #include string using namespace std;class Person { public:Person(string name,int age){this-name name;this-age age;}string name;int age; };void print(Person value) {cout姓名:value.name 年龄:value.ageendl; }void fun() {Person p1(a,10);Person p2(b,20);Person p3(c,30);Person p4(d,40);vectorPerson v;v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);//方法一遍历——while循环//vectorPerson::iterator it_begin v.begin(); //起始迭代器指向容器中的第一个元素//vectorPerson::iterator it_end v.end(); //结束迭代器指向容器中最后一个元素的下一个位置//while(it_begin ! it_end)//{// cout姓名:(*it_begin).name 年龄:(*it_begin).ageendl; //*it_begin解引用得到的数据类型是Person// cout姓名:it_begin-name 年龄:it_begin-ageendl; //也可以通过指针的方式访问成员属性与上面代码的作用一样// it_begin;//}//方法二遍历——for循环//for(vectorPerson::iterator i v.begin();i!v.end();i)//{// cout姓名:(*i).name 年龄:(*i).ageendl;//}//方法三遍历——需要包含算法头文件和回调函数for_each(v.begin(),v.end(),print); }int main() {fun();system(pause);return 0; }使用自定义数据类型时需要注意的是在定义容器的时候也要使用自定义的数据类型通过解引用得到的是自定义的数据类型但是需要加上括号再访问成员变量因为.的优先级高于解引用*的优先级。 上面程序的运行结果如下图所示。 容器中存放自定义数据类型地址的代码示例如下。 #include iostream #include vector //包含vector头文件 #include algorithm //包含标准算法头文件 #include string using namespace std;class Person { public:Person(string name,int age){this-name name;this-age age;}string name;int age; };void print(Person* value) {cout姓名:value-name 年龄:value-ageendl; }void fun() {Person p1(a,10);Person p2(b,20);Person p3(c,30);Person p4(d,40);vectorPerson * v;v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);//方法一遍历——while循环//vectorPerson *::iterator it_begin v.begin(); //起始迭代器指向容器中的第一个元素//vectorPerson *::iterator it_end v.end(); //结束迭代器指向容器中最后一个元素的下一个位置//while(it_begin ! it_end)//{// cout地址:(*it_begin)endl;// cout姓名:(*it_begin)-name 年龄:(*it_begin)-ageendl;// it_begin;//}//方法二遍历——for循环for(vectorPerson *::iterator i v.begin();i!v.end();i){cout地址:(*i)endl;cout姓名:(*i)-name 年龄:(*i)-ageendl;}//方法三遍历——需要包含算法头文件和回调函数//for_each(v.begin(),v.end(),print); }int main() {fun();system(pause);return 0; }上面程序的运行结果如下图所示。 3、容器中嵌套容器 前面已经说过容器相当于数组在一个容器中再嵌套一个容器就相当于一个二维数组。 容器中嵌套容器的代码示例如下。 #include iostream #include vector //包含vector头文件 #include algorithm //包含标准算法头文件 using namespace std;void fun() {vectorvectorint v; //容器中嵌套容器vectorint v1; //创建小容器vectorint v2;vectorint v3;for(int i0;i3;i) //给每个小容器插值{v1.push_back(i1);v2.push_back(i4);v3.push_back(i7);}v.push_back(v1); //给大容器中插入小容器v.push_back(v2);v.push_back(v3);for(vectorvectorint::iterator i v.begin();i!v.end();i) //遍历大容器{//*i此时是vectorint类型还是一个容器中是什么类型解引用得到的就是什么类型for(vectorint::iterator j (*i).begin();j!(*i).end();j) //遍历小容器{cout*j ;}coutendl;} }int main() {fun();system(pause);return 0; }上面程序的运行结果如下图所示。 三、string容器 string是C风格的字符串string本质上是一个类类的内部封装了一个char类型的指针来管理这个字符串是一个char类型的容器。 string类的内部封装了很多成员方法比如查找find、拷贝copy、删除delete、替换replace、插入insert等string管理char*所分配的内存由类内部负责因此不用担心复制越界和取值越界的问题。 1、构造函数 string的构造函数类型包括 string()——创建一个空的字符串默认的空实现 string(const char *str)——使用字符串str初始化 string(const string str)——使用一个string对象初始化另一个string对象 string(int n, char c)——使用n个字符c初始化字符串。 代码中分别使用上面的四种方式创建字符串的代码示例如下。 #include iostream #include string using namespace std;void fun() {string str1;coutstr1str1endl;const char* str hello;string str2(str);coutstr2str2endl;string str3(str2);coutstr3str3endl;string str4(5,a);coutstr4str4endl; }int main() {fun();system(pause);return 0; }上面程序的运行结果如下图所示。 2、赋值操作 string赋值操作包括以下几种。 string operator(const char* s); string operator(const string s); string operator(char c); //把单个字符赋值给字符串 string assign(const char* s); //通过调用assign()函数赋值 string assign(const char* s, int n); //把字符串s的前n个字符赋值给当前字符串注意第一个参数的类型不能是string string assign(const string s); string assign(int n, char c);string的几种赋值操作代码示例如下。 #include iostream #include string using namespace std;void fun() {string str1;str1 helloworld1;coutstr1str1endl;string str2;str2 str1;coutstr2str2endl;string str3;str3 a;coutstr3str3endl;string str4;str4.assign(helloworld4);coutstr4str4endl;string str5;str5.assign(helloworld4,5);coutstr5str5endl;string str6;str6.assign(str5);coutstr6str6endl;string str7;str7.assign(5,a);coutstr7str7endl; }int main() {fun();system(pause);return 0; }上面程序的运行结果如下图所示。 3、字符串拼接 string字符串拼接操作主要有以下几种。 string operator(const char* s); string operator(char c); string operator(const string s); string append(const char* s); string append(const char* s, int n); string append(const string s); string append(const string s, int pos, int n); //字符串s中从pos开始的n个字符连接到字符串结尾string字符串拼接的几种操作代码示例如下。 #include iostream #include string using namespace std;void fun() {string str spo;str rts;coutstrstrendl;str :;coutstrstrendl;string str1 basketball;str str1;coutstrstrendl;str.append( football);coutstrstrendl;str.append( baseballabcdef,9);coutstrstrendl;string str2 volleyball;str.append(str2);coutstrstrendl;str.append( );str.append(str2,7,4);coutstrstrendl; }int main() {fun();system(pause);return 0; }上面程序的运行结果如下图所示。 4、查找和替换 string查找和替换的函数原型如下。 int find(const string s, int pos 0) const; //查找s第一次出现位置从pos开始查找默认是下标为0的位置 int find(const char* s, int pos 0) const; int find(const char* s, int pos, int n) const; //从pos位置查找s的前n个字符第一次位置 int find(const char c, int pos 0) const; //查找字符c第一次出现位置 int rfind(const string s, int pos npos)const; //查找str最后一次位置从pos开始查找默认是字符串最后一个字符的下标 int rfind(const char* s, int pos npos) const; int rfind(const char* s, int pos, int n) const; //从pos查找s的前n个字符最后一次位置 int rfind(const char c, int pos 0) const; //查找字符c最后一次出现位置 //rfind从后往前找find从前往后找 string replace(int pos, int n, const string s); //替换从pos开始的n个字符为字符串s两者的数量不一定相等 string replace(int pos, int n,const char* s);查找和替换的例子如下。 #include iostream #include string using namespace std;void fun1() {int pos;string str hellowordhelloword;pos str.find(llo);coutposposendl;pos str.rfind(llo);coutposposendl;pos str.find(loo); //字符串不存在就返回-1coutposposendl; }void fun2() {string str hood;str.replace(1,2,ellowor); //这里的替换在数量上不是一一对应关系coutstrstrendl; }int main() {fun1();fun2();system(pause);return 0; }上面程序的运行结果如下图所示。 5、字符串比较 字符串比较是按照字符的ASCII进行对比的。字符串相等返回0大于返回1小于返回-1。 字符串比较的函数原型如下。 int compare(const string s) const; int compare(const char* s) const; 函数的实现也很简单如下。 void fun() {string str1 hello;string str2 hello;if(str1.compare(str2) 0){coutstr1 str2endl;}else if(str1.compare(str2) 0){coutstr1 str2endl;}else{coutstr1 str2endl;} }6、字符访问与存取 对string字符串中的单个字符访问有两种方式一种是通过[]下标的方式另一种是通过函数at()进行访问。 关于字符访问的两种方式其代码如下。 #include iostream #include string using namespace std;void fun() {string str hello;//方式一数组下标for(int i0;istr.size();i){coutstr[i];}coutendl;//方式二at()for(int i0;istr.size();i){coutstr.at(i);}coutendl;//修改字符串中的某些位str[2] a;coutstrstrendl;str.at(3) b;coutstrstrendl; }int main() {fun();system(pause);return 0; }7、插入和删除 插入和删除函数的原型如下。 string insert(int pos,const char* s); string insert(int pos,const string s); string insert(int pos,int n,char c); //在指定位置插入n个字符c string erase(int pos,int nnpos); //删除从pos开始的n个字符不给定第二个参数就删除到字符串结束插入和删除的具体实现代码如下。 void fun() {string str hello;str.insert(2,abcd);coutstrstrendl;str.erase(2,4);coutstrstrendl; }8、子串 string子串获取的函数原型如下。 string substr(int pos0,int nnpos)const; //返回由pos开始的n个字符组成的字符串string子串截取的简单应用例子如下。 void fun() {string str zhangsanqq.com;int pos str.find(); //找到截取停止的位置string user str.substr(0,pos);coutuseruserendl; }四、vector容器 vector数据结构和数组非常相似也称为单端数组其与数组的不同之处在于数组是静态空间而vector可以动态扩展。 动态扩展并不是在原有空间之后续接新空间而是找一块更大的内存空间将原数据拷贝到新的空间并释放原有空间。 vector容器的简单示意图如下。 vector容器是单端开口进行相关操作的该容器的迭代器是支持随机访问的迭代器。 1、构造函数 vector容器有四种构造函数在下面的代码中都有体现。 #include iostream #include vector #include string using namespace std;void printVector(vectorint v) {for(vectorint::iterator iv.begin();i!v.end();i){cout*i ;}coutendl; }void fun() {vectorint v1; //1.默认构造for(int i0;i5;i){v1.push_back(i1);}cout默认构造endl;printVector(v1);vectorint v2(v1.begin(),v1.begin()3); //2.通过区间方式进行构造cout通过区间方式进行构造endl;printVector(v2);vectorint v3(5,1); //3.通过n个相同的数据构造cout通过n个相同的数据构造endl;printVector(v3);vectorint v4(v1); //4.拷贝构造cout拷贝构造endl;printVector(v4); }int main() {fun();system(pause);return 0; }上面程序的运行结果如下图所示。 2、赋值操作 容器赋值操作有两种方式赋值和assign指定区间赋值具体的代码示例如下。 #include iostream #include vector #include string using namespace std;void printVector(vectorint v) {for(vectorint::iterator iv.begin();i!v.end();i){cout*i ;}coutendl; }void fun() {vectorint v1;for(int i0;i5;i){v1.push_back(i1);}printVector(v1);vectorint v2; v2 v1; // 赋值printVector(v2);vectorint v3;v3.assign(v1.begin(),v1.end()); //左开右闭区间printVector(v3);vectorint v4;v4.assign(3,6);printVector(v4); }int main() {fun();system(pause);return 0; }上面程序的运行结果如下图所示。 3、容量和大小 对vector容器容量和大小操作的相关函数如下。 empty(); //判断容器是否为空 capacity(); //获取容器容量 size(); //获取容器中元素的个数 resize(int num); //重新指定容器长度num容器变长以默认值填充容器变短超出部分被删除 resize(int num,elem); //重新指定容器长度num容器变长以elem填充关于容器容量和大小操作的应用示例如下。 #include iostream #include vector #include string using namespace std;void printVector(vectorint v) {for(vectorint::iterator iv.begin();i!v.end();i){cout*i ;}coutendl; }void fun() {vectorint v;for(int i0;i10;i){v.push_back(i1);}printVector(v);if(!v.empty()){cout容器不为空endl;cout容器的容量为:v.capacity()endl;cout容器的大小为:v.size()endl;}else{cout容器为空endl;}v.resize(5); //容器变短截取前5个元素printVector(v);v.resize(10,1); //容器变长自定义数据填充后面的元素printVector(v);v.resize(15); //容器变长以0填充后面的元素printVector(v); }int main() {fun();system(pause);return 0; }上面程序的运行结果如下图所示。 4、插入和删除 对vector容器插入和删除操作的相关函数如下。 push_back(ele); //在容器尾部插入元素ele pop_back(); //删除容器最后一个元素 insert(const_iterator pos, ele); //在迭代器指向的pos位置处插入元素ele insert(const_iterator pos, int count, ele); //在迭代器指向的pos位置处插入count个元素ele erase(const_iterator pos); //删除迭代器指向的元素 erase(const_iterator start,const_iterator end); //删除迭代器指向的从start到end之间的元素 clear(); //删除容器中所有元素不同于string容器的插入和删除其可以提供索引值在指定位置进行插入和删除vector容器在插入和删除的时候需要提供迭代器使用索引值是不行的。 插入和删除操作的应用示例如下。 #include iostream #include vector #include string using namespace std;void printVector(vectorint v) {for(vectorint::iterator iv.begin();i!v.end();i){cout*i ;}coutendl; }void fun() {vectorint v;for(int i0;i3;i){v.push_back(i1);}printVector(v);v.pop_back(); //删除最后一个元素printVector(v);v.insert(v.begin()1,5); //在迭代器指向的位置处插入元素printVector(v);v.insert(v.begin()2,3,6); //在迭代器指向的位置处插入n个元素printVector(v);v.erase(v.begin()); //删除迭代器指向的元素printVector(v);v.erase(v.begin(),v.begin()2); //删除迭代器指向区间的元素printVector(v);v.clear(); //清空容器中所有元素//v.erase(v.begin(),v.end()); //与v.clear()的作用相同printVector(v); }int main() {fun();system(pause);return 0; }上面程序的运行结果如下图所示。 5、数据存取 和vector容器中数据存取操作有关的函数如下。 at(int index); //返回索引index指向的元素 operator[int index]; //返回索引index指向的元素 front(); //返回容器中的第一个元素 back(); //返回容器中的最后一个元素数据存取的简单示例如下。 void fun() {vectorint v;for(int i0;i5;i){v.push_back(i1);}coutv.at(3)endl; //下标为3的元素coutv[3]endl;coutv.front()endl; //第一个元素coutv.back()endl; //最后一个元素 }6、容器互换 容器互换指的是两个容器内元素进行互换使用的函数是swap(v)。 容器互换的应用示例如下。 #include iostream #include vector #include string using namespace std;void printVector(vectorint v) {for(vectorint::iterator iv.begin();i!v.end();i){cout*i ;}coutendl; }void fun1() {vectorint v1;vectorint v2;for(int i0;i5;i){v1.push_back(i1);v2.push_back(i6);}coutv1容器内元素:;printVector(v1);coutv2容器内元素:;printVector(v2);v1.swap(v2); //互换两容器coutv1容器和v2容器互换后:endl;coutv1容器内元素:;printVector(v1);coutv2容器内元素:;printVector(v2); }void fun2() //实际的应用 {vectorint v;for(int i0;i1000;i){v.push_back(i1);}cout1.v的容量:v.capacity()endl;cout1.v的大小:v.size()endl;v.resize(3); //重新指定容器大小cout2.v的容量:v.capacity()endl;cout2.v的大小:v.size()endl;vectorint(v).swap(v); //创建匿名对象和当前的容器进行互换匿名对象在本行执行完后就会被回收//相当于将指向容器的指针和指向匿名对象的指针进行了交换大的内存在本行执行完后被系统回收cout3.v的容量:v.capacity()endl;cout3.v的大小:v.size()endl; }int main() {fun1();fun2();system(pause);return 0; }上面程序的运行结果如下图所示。 可以看到通过创建匿名对象和本容器进行交换就可以收缩容器的容量减小其占用的内存。 7、预留空间 vector的预留空间可以减少vector在动态扩展容量时的扩展次数。 reserve(int len); //容器预留len个元素长度预留的位置不初始化元素不可访问关于容器预留空间的示例如下。 #include iostream #include vector #include string using namespace std;void fun1() //不预留空间 {vectorint v;int count 0;int *p NULL;for(int i0;i10000;i){v.push_back(i1);if(p!v[0]){p v[0];count;}}cout开辟内存的次数:countendl; }void fun2() //预留空间 {vectorint v;int count 0;int *p NULL;v.reserve(10000); //一开始就预留空间for(int i0;i10000;i){v.push_back(i1);if(p!v[0]){p v[0];count;}}cout预留空间后开辟内存的次数:countendl; }int main() {fun1();fun2();system(pause);return 0; }上面程序的运行结果如下图所示。 五、deque容器 vector容器是单端数组deque容器是双端数组对于头部和尾部都可以进行插入和删除操作。 vector容器和deque容器的区别在于vector对于头部的插入和删除效率太低数据量越大其效率就越低deque容器在头部的插入删除操作速度比vector快vector访问元素的速度比deque快。 deque容器的简单示意图如下图所示。 deque容器内部的工作原理内部有一个中控器其维护着每段缓冲区的内容缓冲区中存放着真实的数据中控器维护的是每个缓冲区的地址这就使得使用deque时像一片连续的内存空间。 deque容器的迭代器也是支持随机访问的即跳跃性的访问容器里面的元素。 1、构造函数 deque容器的构造函数和vector容器的构造函数类似其应用示例如下。 #include iostream #include deque #include string using namespace std;void printDeque(const dequeint d) //限制为只读不能修改 {for(dequeint::const_iterator id.begin();i!d.end();i){cout*i ;}coutendl; }void fun() {dequeint d1; //默认构造for(int i0;i5;i){d1.push_back(i1);}printDeque(d1);dequeint d2(d1); //拷贝构造printDeque(d2);dequeint d3(d1.begin(),d1.begin()3); //区间构造printDeque(d3);dequeint d4(5,1); //自定义数值构造printDeque(d4); }int main() {fun();system(pause);return 0; }上面程序的运行结果如下图所示。 2、赋值操作 与vector容器一样deque容器进行赋值时有赋值和assign赋值两种方式。 赋值操作的简单示例如下。 void fun() {dequeint d1;for(int i0;i5;i){d1.push_back(i1);}printDeque(d1);dequeint d2;d2 d1; // 赋值printDeque(d2);dequeint d3;d3.assign(d1.begin(),d1.end()); //assign指定区间赋值printDeque(d3);dequeint d4;d4.assign(5,6); //assign指定数值进行赋值printDeque(d4); }3、大小操作 不同于vector容器对于deque容器的操作中没有获取其容量的函数即没有capacity()。 empty(); //判断容器是否为空 size(); //获取容器中元素的个数 resize(int num); //重新指定容器长度num容器变长以默认值填充容器变短超出部分被删除 resize(int num,elem); //重新指定容器长度num容器变长以elem填充关于deque容器大小操作的示例如下。 void fun() {dequeint d;for(int i0;i5;i){d.push_back(i1);}printDeque(d);if(!d.empty()){cout容器不为空endl;cout容器的大小为:d.size()endl;}d.resize(7);printDeque(d);d.resize(10,1);printDeque(d);d.resize(3);printDeque(d); }4、插入和删除 相比于vector容器的插入和删除deque容器的插入和删除稍微复杂一点因为其不仅涉及尾部的操作还涉及头部的操作。 push_front(elem); //在容器头部插入一个数据 push_back(elem); //在容器尾部插入一个数据 pop_front(); //从容器头部删除一个数据 pop_back(); //从容器尾部删除一个数据insert(pos,elem); //在指定位置插入指定元素 insert(pos,n,elem); //在指定位置插入n个指定元素 insert(pos,start_pos,end_pos); //从指定位置开始插入区间数据 clear(); //清空数据 erase(pos); //删除指定位置的数据 erase(start_pos,end_pos); //删除指定区间的数据关于deque容器插入和删除的简单操作示例如下。 #include iostream #include deque #include string using namespace std;void printDeque(const dequeint d) //限制为只读不能修改 {for(dequeint::const_iterator id.begin();i!d.end();i){cout*i ;}coutendl; }void fun() {dequeint d;d.push_back(1);d.push_back(2);d.push_front(3);d.push_front(4);printDeque(d);d.pop_back();d.pop_front();printDeque(d);d.insert(d.begin(),6); //使用插入函数的时候需要提供迭代器d.insert(d.end(),3,6);printDeque(d);dequeint d1;d1.push_back(10);d1.push_back(20);d.insert(d.begin(),d1.begin(),d1.end()); //在容器的指定位置处从插入另一个容器的某一段区间printDeque(d);d.erase(d.begin());printDeque(d);d.clear();printDeque(d); }int main() {fun();system(pause);return 0; }上面程序的运行结果如下图所示。 5、数据存取 deque容器的数据存取有以下几个函数可使用。 at(int index); operator[]; front(); //返回容器中第一个数据 back(); //返回容器中最后一个数据关于数据存取的简单示例如下。 void fun() {dequeint d;d.push_back(1);d.push_back(2);d.push_back(3);for(int i0;id.size();i){//coutd[i] ;coutd.at(i) ;}coutendl;cout第一个元素是:d.front()endl;cout最后一个元素是:d.back()endl; }6、排序 通过sort()就可以对deque容器进行排序函数原型如下。 sort(iterator begin,iterator end); //对区间内的数据进行排序在使用sort()函数之前需要先包含头文件 algorithm。关于deque容器排序的简单应用示例如下。 #include iostream #include deque #include algorithm using namespace std;void printDeque(const dequeint d) //限制为只读不能修改 {for(dequeint::const_iterator id.begin();i!d.end();i){cout*i ;}coutendl; }void fun() {dequeint d;d.push_back(2);d.push_back(1);d.push_back(6);d.push_back(4);d.push_back(5);d.push_back(3);cout排序前:endl;printDeque(d);sort(d.begin(),d.end()); //默认是升序排列cout排序后:endl;printDeque(d); }int main() {fun();system(pause);return 0; }上面程序的运行结果如下图所示。 需要说明的是支持随机访问的迭代器的容器都可以利用sort算法直接对容器中的元素进行排序比如vector容器也是可以的。 六、评委打分案例 有五位选手ABCDE10个评委分别对每一名选手打分去除一个最高分和一个最低分将平均分输出。 实现步骤 1.创建选手类添加属性实例化五个对象依次将其放到vector容器中 2.遍历vector容器把每一个选手的得分情况存到deque容器中 3.对于每个选手的得分使用sort算法对deque容器中的元素进行排序去掉首尾元素 4.遍历deque容器将剔除最高分和最低分后的分数相加并求平均值。 该案例的代码如下。 #include iostream #include string #include vector #include deque #include algorithm #include ctime using namespace std;class Person { public:Person(string name,double score){this-name name;this-score score;}string name;double score; };void createPerson(vectorPerson v) {for(int i0;i5;i){double score 0;string nameSeed ABCDE;string name 选手;name nameSeed[i];Person p(name,score);v.push_back(p);} }void setScore(vectorPerson v) {for(vectorPerson::iterator iv.begin();i!v.end();i){dequeint d;for(int j0;j10;j){int num rand()%41 60; //60-100之间的随机数d.push_back(num);}couti-name的得分情况:endl;for(dequeint::iterator jd.begin();j!d.end();j){cout*j ;}coutendl;sort(d.begin(),d.end()); //对deque容器中的元素进行升序排序d.pop_front(); //去除最低分d.pop_back(); //去除最高分int sum 0;for(dequeint::iterator jd.begin();j!d.end();j){sum *j; //求分数总和}double aver_score sum / d.size(); //获取平均分i-score aver_score; //将求得的平均分存放在成员属性中} }void printScore(vectorPerson v) {for(vectorPerson::iterator iv.begin();i!v.end();i){cout(*i).name的平均分是:(*i).scoreendl;} }int main() {srand((unsigned int)time(NULL)); //加入随机数种子保证生成数的随机性//将5位选手存入vector容器中vectorPerson v;createPerson(v);//评委打分setScore(v);//打印平均分printScore(v);system(pause);return 0; }上面程序的运行结果如下图所示。 本案例是比较综合的一个例子包括了string容器、vector容器和deque容器。 本文参考视频 黑马程序员匠心之作|C教程从0到1入门编程,学习编程不再难
http://www.pierceye.com/news/948683/

相关文章:

  • 平台网站建设方案查看自己电脑的网站开发语言
  • 织梦如何做网站地图建设一个网站用什么软件下载
  • 建设银行互联网网站怎么制作小程序软件
  • 做购物网站平台视觉比较好看的网站
  • 网站建设要做什么会计科目网站建设的展望 视频
  • 那种广告式网站怎么做网站为什么具有网络营销价值
  • 包头建站怎么下载网站动态图片
  • 大企业网站建设哪里好qq网站登录入口
  • 手机网站有什么区别是什么wordpress模板2zzt
  • 想做个网站报价蔬菜价格怎么做公司做网站一般多少钱
  • 南宁老牌网站建设公司公司网站搭建教程
  • 网站首页快照更新快常见的电子商务网站网址
  • 外贸网站导航wordpress category 404
  • 漯河市网站建设在线教育网站建设
  • 便宜网站建设模板网站网站做推广需要营业执照
  • 网站地址栏图标文字企业网站设计公司
  • 公司做网站推广有没有用网址导航被更改了怎么换回来
  • 好看云在线网站模板下载 迅雷下载 迅雷下载地址免费建小程序网站
  • 通州网站制作游戏网站域名
  • 医疗网站前置审批要多长时间营销型外贸网站广州
  • 哈尔滨网站建设oeminc购买手表网站
  • 营销推广公司兰州seo培训
  • 南城网站建设公司php购物网站开发实例源码
  • 无锡网站备案百度应用市场
  • 高端房产网站建设上传空间网站
  • 上海城建建设官方网站中企动力网站价格
  • 网站建设中国十强阜阳网站制作公司多少钱
  • 网站建设公司 温州虚拟机电脑网页版
  • 网站建设原理与实践深建市住房和城乡建设局网站
  • 南通建设招聘信息网站平面设计工作室怎么接单