![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++泛型算法
文章平均质量分 54
c++泛型算法
KingOfMyHeart
会好起来的.
展开
-
详解C++特性之noexcept (C++11 C++17 C++20)
上面说到,noexcept()可以判断目标类型的移动构造函数是否可能抛出异常,那么我们可以先判断有没有抛出异常的可能,如果有,那么使用传统的复制操作,那么执行移动构造。实际上,这并不是最优解,因为很多自定义类型的拷贝构造也是很简单的,几乎不会抛出异常,我们还可以利用noexcept运算符的能力,判断类型的拷贝构造是否会抛出异常。判断类型是一个普通类型还是复杂的类型,如果是普通类型,返回true,则表示不会抛出异常,否则将表示可能会抛出异常。函数,则程序直接退出,否则跳转到处理异常的。在C++11前,使用。原创 2023-07-23 21:07:50 · 1288 阅读 · 0 评论 -
模板特例化与偏特化
模板是C++中一个很重要的特性,写一份代码能用于多种数据类型(包括用户自定义类型)。例如,STL的sort()函数可以用于多种数据类型的排序,类stack可以用作多种数据类型的栈。但是,如果我们想对特定的数据类型执行不同的代码(而不是通用模板)呢?这种情况下就可以使用模板特例化(template specialization)。一、函数模板特例化当特例化一个函数模板时,必须为原模板中的每个模板参数都提供实参。使用关键字template后跟一个空尖括号<>,即template <>转载 2021-04-29 22:21:36 · 412 阅读 · 0 评论 -
c++11中shared_from_this的使用情景与案例
class C{public: C(int b=10):a(b){ cout<<"construct"<<endl; } ~C(){ cout<<"destruct"<<endl; } void show()const{ cout<<"a = "<<a<<endl; } C*object_ptr(){ return this; }private: int a;};使用场景:原创 2021-04-29 22:06:09 · 3616 阅读 · 1 评论 -
记录几个C++智能指针shared_ptr常用方法
#include <memory>#include <iostream>using namespace std;class Test{public: Test(int b=10):a(b){ cout<<"construct"<<endl; } ~Test(){ cout<<"destruct"<<endl; } void show()const{ cout<<"a = "<<a原创 2021-04-29 21:28:39 · 144 阅读 · 0 评论 -
类模板基础(二)嵌套类的前置声明与typename的双重作用
嵌套类实现链表类模板:一. 前置声明:Node类作为一个嵌套类包含在Link类中,由于编译器是从上往下进行扫描,所以,在这里我们要前面使用Node是需要告诉编译器我已经定义了这个类,需要在前面进行声明一下。template<typename T = int>class Link{public: class Node;//在前面使用到Node类,需要前置声明 Link()...原创 2019-08-18 20:20:12 · 1271 阅读 · 0 评论 -
注意区分模板名和类名或者函数名
对于函数模板:template<typename T>bool com(T a, T b){ return a > b;}int main(){ com(10,100); com<float>(1.2, 9.0); return 0;}以上出现com的地方全部都是模板名而当模板实例化以后,编译器为我们产生的对映类型的函数com才能称得上...原创 2019-08-10 21:58:55 · 766 阅读 · 0 评论 -
类模板基础(一)
类模板之链表;类模板的选择性实例化;友元类;一、类模板之链表://节点模板template<typename T>class Node{public: Node(T data=T()):_data(data),_pnext(NULL){} ~Node<T>(){} T _data; Node<T> *_pnext;};//链表类...原创 2019-08-11 19:50:50 · 227 阅读 · 0 评论 -
函数模板中从调用点到模板参数列表的类型的传递替换是define还是typedef
一.区分define以及typedef:首先一点,大家都可以答得上来,define在预编译阶段处理,typedef在编译阶段处理.来看下面的这个例子:明确一点:const修饰的是离它最近的类型#define T inttypedef int T;const T a;在这里没什么区别,但是当const后面有*的时候就很明显了.#define T char*typedef cha...原创 2019-08-10 21:35:34 · 218 阅读 · 0 评论 -
函数模板的特例化(专用化)以及类型含有const的特殊情况
一.函数模板特例化: 1 #include <iostream> 2 #include <typeinfo> 3 using namespace std; 4 ...原创 2019-08-05 19:21:38 · 2467 阅读 · 0 评论 -
函数模板的隐式实例化和显式实例化
一.隐式实例化: 1 #include <iostream> 2 #include <typeinfo> 3 using namespace std; 4 5 template <typename T> 6 bool compare(T a,T b) 7 { 8 cout<<typeid(T).name()&...原创 2019-08-05 17:23:26 · 698 阅读 · 0 评论 -
函数模板基础
本文知识点:(不按顺序讲解)模板的类型参数模板的实例化:显式实例化 和 隐式实例化模板的非类型参数模板的实参推演模板的特例化(专用化)模板函数的重载1.模板的类型参数:定义模板参数列表:template <typename T,class E> //类型由typename或者class指定;T 和 E是类型参数,将来专门接收各种各样的类型.2.函数模板与...原创 2019-08-06 17:33:52 · 200 阅读 · 0 评论 -
std::sort
std::sort:将给定区间数据进行排序,默认由小到大.#include <iostream>#include <functional> //函数对象#include <algorithm> //泛型算法库#include <vector>#include <ctime>//自定义的std::greater 类class...原创 2020-04-19 18:16:50 · 493 阅读 · 0 评论