C++模板

来源:互联网 发布:2016加入淘宝客的条件 编辑:程序博客网 时间:2024/05/17 23:46

模板就是把类型也作为参数。假设有一个函数如下。

int max(int a, int b){ return (a > b) ? a; b; }char max(char a, char b){ return (a > b) ? a; b; }

两个函数逻辑结构完全一样,就是数据结构不一样,要实现只编写一个函数就完成所有这些函数,要用到模板。

关键字:template typename class

这里的class不是代表类,而是表示数据类型。

template <class T>//class用typename代替也可以T max(T a, T b){return (a > b) ? a; b;}


用typename。

template<typename T>void swap(T& a, T& b){T tmp = a;a = b;b = tmp;}int x = 20, y = 30;swap<int>(x, y);


模板参数时。

template<typename T,typename C>void display(T a, C b){cout << a << " " << b << endl;}

C++中类也存在着模板。格式如下。

template<typename T>class MyArray{public:void display();private:T *m_pArr;//数据成员指针};//类外定义时大不相同template<class T>//所有成员函数都要加这一句void MyArray<T>::display(){....}int mian(){MyArray<int> arr;arr.display();return 0;}

特别的提醒,在目前的开发环境下vs08.vs10都不能将模板类声明和实现分开编译,即不能写成.h和.cpp分开的样式,要写在一个.h下。


C++的标准模板库STL。

vector是向量,其实就是数组的封装,可以根据需要变长变短。"include<vector>"

如果要删除元素,可以用 l.erase(begin()+n),为删除第n个元素。

vector<T> v1;//保存类型为T的对象,默认构造函数v1为空vector<T> v2(v1);//v2是v1的一个副本vector<T> v3<n, i>;//v3包含n个值为i的元素vector<T> v4(n);//v4包含初始化元素的n个副本empty();//判断是否为空,返回bool类型begin();//返回向量迭代器的首元素end();//返回向量迭代器元素的下一个元素clear();//清空向量front();//第一个数据back();//最后一个数据size();//数据个数push_back();//将数据插入向量尾部pop_back();//删除尾部数据int main(){vector<int >vec;vec.push_back(10);vec.pop_back();cout << vector.size() << endl;return 0;}

迭代器iterator。我们通过迭代器可以访问模板库对象里的每个元素。


链表模板,list。特点是插入速度快。"include<list>",遍历只能用迭代器。

list<int>::iterator itor = list.begin();for (; itor != list.end(); itor++){cout << *itor << endl;}


映射模板,map。存储的数据都是成对出现。"include<map>"

map<int, string> m;pair<int, string>p1(10, "SH");pair<int, string>p2(20, "BJ");m.insert(p1);m.insert(p2);cout << m[10] << endl;cout << m[20] << endl;

0 0