C++模板
2016-03-15 13:51
337 查看
模板就是把类型也作为参数。假设有一个函数如下。
两个函数逻辑结构完全一样,就是数据结构不一样,要实现只编写一个函数就完成所有这些函数,要用到模板。
关键字:template typename class
这里的class不是代表类,而是表示数据类型。
用typename。
多模板参数时。
C++中类也存在着模板。格式如下。
特别的提醒,在目前的开发环境下vs08.vs10都不能将模板类声明和实现分开编译,即不能写成.h和.cpp分开的样式,要写在一个.h下。
C++的标准模板库STL。
vector是向量,其实就是数组的封装,可以根据需要变长变短。"include<vector>"
如果要删除元素,可以用 l.erase(begin()+n),为删除第n个元素。
迭代器iterator。我们通过迭代器可以访问模板库对象里的每个元素。
链表模板,list。特点是插入速度快。"include<list>",遍历只能用迭代器。
映射模板,map。存储的数据都是成对出现。"include<map>"
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;
相关文章推荐
- 深入浅析 C++ 调用 Python 模块
- C++ 调用lib 和 dll的 方法 及 动态库DLL与静态库lib的区别
- C++ List模板
- C语言详解 - 文件
- C++函数与java函数菜鸟级的对比理解
- 第一次c++上机报告-1
- C语言函数sscanf()的用法
- 深入理解C++中的异常处理机制
- C++中Vector的erase()操作以及与remove的区别
- 排序——选择排序(C++)
- VC++的LNK1102 error out of memory 问题
- C++11 右值引用 编译器验证
- 开始学习C语言C++在这里记录自己的成长。简单的两变量交换问题
- C++怎么把字符串中的小写变为大写
- C++中的struct和class的区别
- C++用字符数组实现MyString类
- 详解让C++新手闹心的语句“cout<<"Hello!"<<endl;”
- 详解C++中经常看到的#include <iostream> using namespace std;
- C++引入名字空间(namespace)意义何在?为什么using namespace std会成为常用语句?
- Jni中C++和Java的参数传递(转)