您的位置:首页 > 编程语言 > C语言/C++

C++模板

2016-03-15 13:51 337 查看
模板就是把类型也作为参数。假设有一个函数如下。

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: