【C++初阶】C++ 模板与 string 类详解
模板当我们写交换两个元素的函数时通常会这样写代码语言javascriptAI代码解释void swap(int x, int y) { int tmp x; x y; y tmp; }但是如果要交换long long类型、double类型甚至自定义类型就需要写多个函数了。为了解决这个问题C 引入了模板这个概念。1. 函数模板代码语言javascriptAI代码解释templateclass T void swap(T a1, T a2) { T tmp a1; a1 a2; a2 tmp; }注意点class可以改成typename现阶段两者没有区别实质编译器自动推断生成对应函数类比类的实例化称为模板的实例化同一个T不能代表不同类型代码语言javascriptAI代码解释int a 1; double b 2.0; swap(a, b); // 报错swap: 未找到匹配的重载函数处理不同类型的参数方法1强制类型转换代码语言javascriptAI代码解释templateclass T T add(const T a, const T b) { return a b; } cout add(a, (int)b) endl;这种方法有很多局限性。方法2显式实例化代码语言javascriptAI代码解释addint(a, b); // 在前面加上类型方法3定义两个模板参数代码语言javascriptAI代码解释templateclass T1, class T2 T1 add(const T1 a, const T2 b) { return a b; }模板参数作为返回值有些时候编译器无从推断T的类型代码语言javascriptAI代码解释templateclass T T* func(int n) { return new T[n]; }这个时候就必须显式实例化代码语言javascriptAI代码解释int* a funcint(5);模板与普通函数的优先级代码语言javascriptAI代码解释templateclass T1, class T2 T1 add(const T1 a, const T2 b) { return a b; } int add(const int a, const int b) { return a b; }根据调试结果优先调用对应的普通函数。2. 类模板为方便理解先写一个简单的栈类代码语言javascriptAI代码解释templateclass T class stack { public: stack(int n 4) : capacity(n) , size(0) , _arr(new T[n]) { } ~stack() { delete[] _arr; _arr nullptr; capacity 0; size 0; } void push(const T s) { if (capacity size) { T* tmp new T[2 * capacity]; memcpy(tmp, _arr, sizeof(T) * size); delete[] _arr; capacity * 2; _arr tmp; } _arr[size] s; } private: size_t capacity; size_t size; T* _arr; };注意类模板必须显式实例化代码语言javascriptAI代码解释stackint st1; stackdouble st2;这样就可以让栈中存储不同类型的元素了。声明与定义分离代码语言javascriptAI代码解释// 声明 templateclass T class stack { public: // ... void push(const T s); // ... }; // 定义 templateclass T void stackT::push(const T s) { if (capacity size) { T* tmp new T[2 * capacity]; memcpy(tmp, _arr, sizeof(T) * size); delete[] _arr; capacity * 2; _arr tmp; } _arr[size] s; }甚至可以使用不同的模板参数名代码语言javascriptAI代码解释templateclass X void stackX::push(const X s) { // ... }这也可以证明模板实质上是编译器自动生成特定元素类型的类。有了模板C 就可以写一份代码无伤兼容各种类型这就诞生了STL让顺序表、栈、队列等数据结构由编译器帮你生成。C string 类详解简介在认识 string 之前先介绍两个有用的网站C 官方文档优点更新及时缺点较杂乱在接下来的内容中我们将使用非官方文档进行讲解。1. 使用方法注意这里的一些代码不需要彻底理解我们在模拟实现部分会详细讲解。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2587244.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!