#include<iostream>
#include<stack>
usingnamespace std;
void f(stack<int> x)
{
x.push(10);
}
int main()
{
stack<int> a;
a.push(1);
a.push(2);
f(a);
cout << a.top() << endl;
return 0;
}
看一下上面的程序,因为函数f的实参x是一个stack类的对象,函数调用时,是用形参a拷贝构造出x,这里a和x是两个栈对象,在x中压入10,不会影响到a,在main函数中输出a的栈顶值,还是2。
如果把f改为void f(stack<int> &x),函数调用时x就是a的引用,也就是在f()函数内,x就是a,x中压入10,也就是a压入10,在main()函数中输出a的栈顶值,那就是10了。
另外 stack类模板里的类型参数,可以不仅仅是简单数据类型,比如string就是不是简单数据类型,而且还可以是另一个模板类,但这种情况用起来比较复杂。