兰溪市建设局官方网站,优化搜索点击次数的方法,做网站要域名吗,汕头企业制作网站1、stack stack 模板类的定义在stack头文件中。 stack 模板类需要两个模板参数#xff0c;一个是元素类型#xff0c;一个容器类型#xff0c;但只有元素类型是必要 的#xff0c;在不指定容器类型时#xff0c;默认的容器类型为deque。 定义stack 对象的示例代码… 1、stack stack 模板类的定义在stack头文件中。 stack 模板类需要两个模板参数一个是元素类型一个容器类型但只有元素类型是必要 的在不指定容器类型时默认的容器类型为deque。 定义stack 对象的示例代码如下 stackint s1; stackstring s2; stack 的基本操作有 入栈如例s.push(x); 出栈如例s.pop();注意出栈操作只是删除栈顶元素并不返回该元素。 访问栈顶如例s.top() 判断栈空如例s.empty()当栈空时返回true。 访问栈中的元素个数如例s.size()。 2、queue queue 模板类的定义在queue头文件中。 与stack 模板类很相似queue 模板类也需要两个模板参数一个是元素类型一个容器类 型元素类型是必要的容器类型是可选的默认为deque 类型。 定义queue 对象的示例代码如下 queueint q1; queuedouble q2; queue 的基本操作有 入队如例q.push(x); 将x 接到队列的末端。 出队如例q.pop(); 弹出队列的第一个元素注意并不会返回被弹出元素的值。 访问队首元素如例q.front()即最早被压入队列的元素。 访问队尾元素如例q.back()即最后被压入队列的元素。 判断队列空如例q.empty()当队列空时返回true。 访问队列中的元素个数如例q.size() #include cstdlib #include iostream #include queue using namespace std; int main() { int e,n,m; queueint q1; for(int i0;i10;i) q1.push(i); if(!q1.empty()) coutdui lie bu kong\n; nq1.size(); coutnendl; mq1.back(); coutmendl; for(int j0;jn;j) { eq1.front(); coute ; q1.pop(); } coutendl; if(q1.empty()) coutdui lie bu kong\n; system(PAUSE); return 0; } 3、priority_queue 在queue头文件中还定义了另一个非常有用的模板类priority_queue(优先队列。优先队 列与队列的差别在于优先队列不是按照入队的顺序出队而是按照队列中元素的优先权顺序 出队默认为大者优先也可以通过指定算子来指定自己的优先顺序。 priority_queue 模板类有三个模板参数第一个是元素类型第二个容器类型第三个是比 较算子。其中后两个都可以省略默认容器为vector默认算子为less即小的往前排大 的往后排出队时序列尾的元素出队。 定义priority_queue 对象的示例代码如下 priority_queueint q1; priority_queue pairint, int q2; // 注意在两个尖括号之间一定要留空格。 priority_queueint, vectorint, greaterint q3; // 定义小的先出队 priority_queue 的基本操作与queue 相同。 初学者在使用priority_queue 时最困难的可能就是如何定义比较算子了。 如果是基本数据类型或已定义了比较运算符的类可以直接用STL 的less 算子和greater 算子——默认为使用less 算子即小的往前排大的先出队。 如果要定义自己的比较算子方法有多种这里介绍其中的一种重载比较运算符。优先队 列试图将两个元素x 和y 代入比较运算符(对less 算子调用xy对greater 算子调用xy) 若结果为真则x 排在y 前面y 将先于x 出队反之则将y 排在x 前面x 将先出队。 看下面这个简单的示例 #include iostream #include queue using namespace std; class T { public: int x, y, z; T(int a, int b, int c):x(a), y(b), z(c) { } }; bool operator (const T t1, const T t2) { return t1.z t2.z; // 按照z 的顺序来决定t1 和t2 的顺序 } main() { priority_queueT q; q.push(T(4,4,3)); q.push(T(2,2,5)); q.push(T(1,5,4)); q.push(T(3,3,6)); while (!q.empty()) { T t q.top(); q.pop(); cout t.x t.y t.z endl; } return 1; } 输出结果为(注意是按照z 的顺序从大到小出队的) 3 3 6 2 2 5 1 5 4 4 4 3 再看一个按照z 的顺序从小到大出队的例子 #include iostream #include queue using namespace std; class T { public: int x, y, z; T(int a, int b, int c):x(a), y(b), z(c) { } }; bool operator (const T t1, const T t2) { return t1.z t2.z; } main() { priority_queueT, vectorT, greaterT q; q.push(T(4,4,3)); q.push(T(2,2,5)); q.push(T(1,5,4)); q.push(T(3,3,6)); while (!q.empty()) { T t q.top(); q.pop(); cout t.x t.y t.z endl; } return 1; } 输出结果为 4 4 3 1 5 4 2 2 5 3 3 6 如果我们把第一个例子中的比较运算符重载为 bool operator (const T t1, const T t2) { return t1.z t2.z; // 按照z 的顺序来决定t1 和t2 的顺序 } 则第一个例子的程序会得到和第二个例子的程序相同的输出结果。