大家都知道,c++提供了强大的模板的功能,模板使代码重用提升到了另一个高度,而c++更提供了STL(标准模板库)供开发人员进行快速开发,STL里面包含了stack、queue、list、set、map等经常用到的数据结构,在写程序的时候大家可以使用#include<algorithm.h>把所有的STL都包括到程序里,或者是使用#include<stack>只包含使用的头文件,我们以stack为例子看一下如何去使用
#include <stack>
#include <iostream>
int main( )
{
   using namespace std;
   stack <int> s1, s2;
   stack <int>::size_type i;
   s1.push( 1 );
   i = s1.size( );
   cout << "The stack length is " << i << "." << endl;
   s1.push( 2 );
   i = s1.size( );
   cout << "The stack length is now " << i << "." << endl;
}
大家可以看到 stack <int> s1, s2; 这里定义了两个栈s1和s2,相比起以前要自己写个struct是不是方便多了?尖括号里面的int就是这个stack的类型,而这个类型可以是int,可以是string可以是char可以是std里面定义的任何类型,但是不可以使用托管资源如stack<string^> k;这样的定义是会报错的。对于这个stack,可以使用
s1.push(2);
s1.pop();
这样来进行入栈和出栈。
二)高级应用
前面简单的例子大家都会明白怎么用,但是,我相信,你们需要的数据结构远远不只这么简单,大家可能会用到,在一个stack里面再放置一个stack,就是说栈里面的每个元素又是一个栈或者是栈里面的每个元素是一个队列。
这就是模板的嵌套:
stack<queue<int>> stqu;
list<stack<string>> lis;
stack<stack<int>> stst;
list<list<int>> lilii;
这是定义的方法,而你想动态地在stack<stack<int>> stst;里面添加元素,静态的添加是很简单的,定义一个stack<int> temp;然后stst.push(temp);就可以了,但是如果stack的元素不确定呢,或者是你需要动态得去创建这些stack<int> 元素。于是你需要动态去添加,在c#里面是很方便的:stst.Add(new stack<int>());
在c++里面的写法是:stst.push(stack<int>());
但是不同c#,在c++里面是不可以使用下标去访问这些模板的,只能使用迭代器,下面是遍历的例子,
for(stack<stack<int>>::iterator iter=stst.begin();iter!=stst.end();iter++)
{}
希望这些可以帮到大家!使用这些技术能够更加快捷而且容易地写出复杂的数据结构!