面向过程的编程风格
- 如何编写函数
都是知道的内容,有个就是在main中终止程序可以用#include的exit()函数 调用函数
这里讲到了原来c里面就提到的东西就是如果调用函数的时候只传递一个数组的话是按值传递的方式,及复制了一个数组过去,此时在该函数中若使用swap并不改变数组的实际顺序。那么就需要按地址传递数组。当我们调用一个函数的时候,会在内存中建立起一块特殊区域成为程序堆栈(program stack),它提供了每个函数参数的储存空间,也提供了函数中所定义对象的内存空间–我们称这些对象为local object(局部对象)。一旦函数完成,这块内存就会被释放,或者从程序堆栈中pop出来。
其中需要指出将vector按地址传递的两种方式
- 将vector的参数声明为reference(引用)
void display(const vector<int> &vec)
{
for(int ix=0;ix<vec.size();ix++)
{
cout<<vec[ix]<<'\n';
}
}
- 还可以以pointer的形式传递,注意它与前者对vec的表达方式的不同
void display(const vector<int> *vec)
{
for(int ix=0;ix<vec->size;ix++)
{
cout<<(*vec)[ix]<<'\n';
}
}
动态内存管理对于c中我知道的是malloc,而c++提供了一种跟简单的方式:new Type
int *p;
pi=new int
如果要释放这部分内存可以用delete:delete pi;delete []pia;
- 使用局部静态对象
对于多次调用一个函数同时希望这个函数中的数组能够在被使用的过程中被保存以备之后调用函数的时候在再次使用。此时可以声明一个局部静态对象。
static vector elems;
此时elems就是一个局部静态对象。
- 提供重载函数(function overloading)
通过传给函数不同的参数列表使函数执行不同的过程。
void display(char ch);
void display(const string&);
void display(const string&,int);
- 定义并使用模板函数
在定义函数的过程中将函数中的参数抽离出来从而达到定义模板函数的目的。function template以template开场,之后接着<>包起来的一个或多个标识符,表示以后要使用的数据类型,例如:
template <typename elemType>
void display(const string &msg,const vector<elemType> &vec)
{
cout<<msg;
for(int i=0;i<vec.size();i++)
{
elemType t=vec[i];
cout<<t<<' ';
}
}