Linux C/C++ 模板:主模板、完全特化
来源:互联网 发布:中国旅游服务贸易数据 编辑:程序博客网 时间:2024/05/18 12:41
一、代码
#include <iostream>#include <cstring>#include <vector>#include <algorithm>using namespace std;//主模板template <typename T>class Heap{public: void push(const T& val); T pop(); bool empty() const { return m_vec.empty(); }private: vector<T> m_vec;};template <typename T>void Heap<T>::push(const T& val){ m_vec.push_back(val); push_heap(m_vec.begin(), m_vec.end());}template <typename T>T Heap<T>::pop(){ pop_heap(m_vec.begin(), m_vec.end()); T tmp = m_vec.back(); m_vec.pop_back(); return tmp;}//完全特化template <>class Heap<const char*>{public: void push(const char* val); const char* pop(); bool empty() { return m_vec.empty(); }private: vector<const char*> m_vec;};bool strLess(const char* a, const char* b){ return strcmp(a, b) < 0;}void Heap<const char*>::push(const char* val){ m_vec.push_back(val); push_heap(m_vec.begin(), m_vec.end(), strLess);}const char* Heap<const char*>::pop(){ pop_heap(m_vec.begin(), m_vec.end()); const char* tmp = m_vec.back(); m_vec.pop_back(); return tmp;}//int main(int argc, char*argv[]){ //主模板 Heap<int> h1; h1.push(1); h1.push(3); h1.push(2); cout<<"is empty: "<<h1.empty()<<endl; cout<<h1.pop()<<endl; cout<<h1.pop()<<endl; cout<<h1.pop()<<endl; cout<<"is empty: "<<h1.empty()<<endl<<endl; //完全特化 Heap<const char*> h2; h2.push("aa"); h2.push("cc"); h2.push("bb"); cout<<"is empty: "<<h2.empty()<<endl; cout<<h2.pop()<<endl; cout<<h2.pop()<<endl; cout<<h2.pop()<<endl; cout<<"is empty: "<<h2.empty()<<endl<<endl; // Heap<char*> h3; h3.push("aa"); h3.push("bb"); h3.push("cc"); cout<<"is empty: "<<h3.empty()<<endl; cout<<h3.pop()<<endl; cout<<h3.pop()<<endl; cout<<h3.pop()<<endl; cout<<"is empty: "<<h3.empty()<<endl; return 0;}
二、输出结果
第1个主模板、第2个完全特化输出结果正确。
第3个结果不正确,因为没有局部特化(针对指针类型的特化)。
0 0
- Linux C/C++ 模板:主模板、完全特化、局部特化
- Linux C/C++ 模板:主模板、完全特化
- 【c++】模板的特化
- Linux C/C++ 模板:类模板成员特化
- C++—模板特化和偏特化
- 【C++】模板类、特化以及偏特化!!!
- C++:函数模板、类模板及其特化
- Linux C/C++ 模板:模板术语 模板参数/模板实参/模板名字/模板ID/特化/实例化
- template-模板完全特化
- Linux C/C++ 模板:针对类型信息的特化
- C++模板的特化
- C++模板的特化
- C++——模板特化和偏特化
- C++——模板特化和偏特化
- C++——模板特化和偏特化
- C++——模板特化和偏特化
- 模板完全特化和部分特化
- Linux C/C++ 模板:类模板(主模板)
- 鸟哥Linux—第五章、首次登入与在线求助 man page
- 冒泡排序
- ZOJ 2833-Friendship
- Java String之String和CharSequence、StringBuilder和StringBuffer的区别
- LeetCode 099 Recover Binary Search Tree
- Linux C/C++ 模板:主模板、完全特化
- MyBatis+Spring-SqlSessionFactoryBean
- iOS gbk与utf8 互转
- [leetcode] #25 Recover Binary Search Tree
- 数据结构——串的模式匹配算法
- 淡若清风,静如兰
- 心累到底是什么?
- 计算机组成原理1
- 基于gemini的blueprint(原生是Spring DM)实现对bundle生命周期的监听