随笔分类 -  C++

摘要:函数模板 当我们想要定义一个可以支持泛型的函数时,就要采用函数模板的方式了。所谓泛型就是可以支持多种类型的操作,比如我们定义一个compare操作,他可以根据传递给他的参数类型动态调用对应的函数版本,实现多种类型的比较。 template <typename T> int compare(const 阅读全文
posted @ 2022-04-30 18:40 恋恋风辰 阅读(171) 评论(0) 推荐(0) 编辑
摘要:C++ 特性 C++ 三大特性,封装继承多态。我们先实现一个Quote作为基类 class Quote { public: Quote() = default; Quote(const std::string &book, double sales_price) { price = sales_pr 阅读全文
posted @ 2022-04-28 22:11 恋恋风辰 阅读(150) 评论(0) 推荐(0) 编辑
摘要:lambda表达式 lambda表达式又称为匿名表达式,是C11提出的新语法。[]存储lambda表达式要捕获的值,()内的参数为形参,可供外部调用传值。lambda表达式可以直接调用 // 1 匿名调用 [](string name) { cout << "this is anonymous" < 阅读全文
posted @ 2022-04-11 22:33 恋恋风辰 阅读(208) 评论(0) 推荐(0) 编辑
摘要:本文介绍了C++ 运算符重载的用法,以我们构造的string类为例子,说明重载的用法。 构造我们自己的string类 声明如下 class mystring_ { public: mystring_(/* args */); mystring_(const mystring_ &mstr); mys 阅读全文
posted @ 2022-04-10 16:01 恋恋风辰 阅读(130) 评论(0) 推荐(0) 编辑
摘要:本文介绍C++单例模式的集中实现方式,以及利弊 局部静态变量方式 //通过静态成员变量实现单例 //懒汉式 class Single2 { private: Single2() { } Single2(const Single2 &) = delete; Single2 &operator=(con 阅读全文
posted @ 2022-03-20 16:49 恋恋风辰 阅读(1269) 评论(0) 推荐(0) 编辑
摘要:问题描述 有一个连续的int数组,数组中的数据升序排序,数组中的数据不唯一,有重复数据,要求在数组中查找指定值为target的数据,返回target最小的下标,如果找到返回其最小的下标,如果没有找到,返回-1, 要求用 用二分查找的方式解决上述问题, 要求时间复杂度为Olog(n),空间复杂度为O( 阅读全文
posted @ 2022-03-03 11:58 恋恋风辰 阅读(88) 评论(0) 推荐(0) 编辑
摘要:这篇文章讲解C++ 面试常问的几个问题。本文通过demo讲解初始化列表,继承,字符串等常问问题。看下边这个例子 初始化列表 //基类 class Base { public: Base() : m_nbase(0), m_nbase2(m_nbase + 100) {} Base(int n) : 阅读全文
posted @ 2022-03-03 11:56 恋恋风辰 阅读(148) 评论(0) 推荐(0) 编辑
摘要:右值与右值引用 不能修改的值就是右值,右值一般为临时变量。常见的右值有字面常量值,返回右值的表达式。 所谓右值引用就是必须绑定到右值的引用。我们通过&&来获得右值引用。 右值引用有一个重要的性质——只能绑定到一个将要销毁的对象。 因此,我们可以自由地将一个右值引用的资源“移动”到另一个对象中。 vo 阅读全文
posted @ 2022-03-01 15:36 恋恋风辰 阅读(259) 评论(0) 推荐(0) 编辑
摘要:动态内存管理 之前我们讲述过动态内存的开辟,可以通过new, malloc,以及alloc等方式,本文通过介绍alloc方式,构造一个StrVec类,这个类的功能类似于一个vector,实现字符串的管理,其中包含push一个字符串,动态扩容,析构,回收内存等操作。 StrVec类实现细节 StrVe 阅读全文
posted @ 2022-02-10 11:06 恋恋风辰 阅读(193) 评论(0) 推荐(0) 编辑
摘要:拷贝控制 有时候我们需要两个类对象互相关联,当其中一个对象修改后也要关联修改另一个,用这个例子说明拷贝控制的案例。我们有两个类,Message类表示信息类,Folder类表示文件夹类,Message类里有成员folders表示其所属于哪些文件夹。Folder类有成员messages表示其包含哪些me 阅读全文
posted @ 2022-02-08 16:58 恋恋风辰 阅读(68) 评论(0) 推荐(0) 编辑
摘要:swap操作 我们常用的交换两个数据的操作是这样 void swap_int(int &a, int &b) { int temp = a; a = b; b = temp; } 主函数调用是这样的 int a = 100, b = 200; swap_int(a, b); cout << "a i 阅读全文
posted @ 2022-01-28 17:37 恋恋风辰 阅读(490) 评论(0) 推荐(0) 编辑
摘要:拷贝控制 前文我们介绍了HasPtr类的拷贝控制,实现了行为像值的类,所谓行为像值的类就是我们所说的深拷贝,将一个类对象拷贝给另一个类对象时,其所有的成员都作为副本在新的类对象创建一遍,如果是指针类型的成员,则将指针指向的空间的数据复制一份给新对象,这样两个对象所有的成员都不关联,实现了深拷贝,不会 阅读全文
posted @ 2022-01-27 17:24 恋恋风辰 阅读(36) 评论(0) 推荐(0) 编辑
摘要:拷贝构造函数 一个类可以不定义拷贝构造函数,系统会默认提供一个拷贝构造函数,叫做合成拷贝构造函数。与默认构造函数不同的是,即使我们定义了其他构造函数,系统也会为我们生成合成拷贝构造函数。合成的拷贝构造函数会将其参数的成员逐个拷贝到正在创建的对象中。编译器从给定对象中依次将每个非static成员拷贝到 阅读全文
posted @ 2022-01-26 16:58 恋恋风辰 阅读(297) 评论(0) 推荐(0) 编辑
摘要:简介 本篇利用之前介绍的智能指针,关联容器,顺序容器等知识,做一个文本查询程序。该程序读取文本中的内容,然后根据输入的单词,判断该单词出现多少次,出现在哪些行,每行的句子是什么。比如我们输入elment,输出如下 element occurs 112 times (line 36) A set el 阅读全文
posted @ 2022-01-21 18:01 恋恋风辰 阅读(61) 评论(0) 推荐(0) 编辑
摘要:C语言和标准库提供了两种一次分配一个对象数组的方法。C语言定义了另一种new表达式语法,可以分配并初始化一个对象数组。标准库中包含一个名为allocator的类,允许我们将分配和初始化分离。使用allocator通常会提供更好的性能和更灵活的内存管理能力。 new和数组 为了让new分配一个对象数组 阅读全文
posted @ 2022-01-21 14:16 恋恋风辰 阅读(625) 评论(0) 推荐(0) 编辑
摘要:unique_ptr unique_ptr和shared_ptr不同,unique_ptr不允许所指向的内容被其他指针共享,所以unique_ptr是不允许拷贝构造和赋值的。 void use_uniqueptr() { //指向double类型的unique指针 unique_ptr<double 阅读全文
posted @ 2022-01-19 17:00 恋恋风辰 阅读(97) 评论(0) 推荐(0) 编辑
摘要:指针 C++提供了对指针操作的方法,当我们用new开辟指定类型的空间后,就生成了一个指针。 void use_pointer() { //开辟整形指针,指向一个值为5的元素 int *pint = new int(5); //开辟指向字符串的指针 string *pstr = new string( 阅读全文
posted @ 2022-01-18 17:41 恋恋风辰 阅读(613) 评论(0) 推荐(0) 编辑
摘要:之前我们介绍过顺序容器,list, vector, queue等,这一篇介绍关联容器, C++关联容器主要有两大类,map和set。 map map主要是用来管理key,value类型的结构的。 void use_map() { map<string, size_t> word_count; str 阅读全文
posted @ 2022-01-14 17:02 恋恋风辰 阅读(56) 评论(0) 推荐(0) 编辑
摘要:除了容器自定义的迭代器之外,标准库还提供了其他几种迭代器,包括插入迭代器,流迭代器,反向迭代器,移动迭代器。 插入迭代器 迭代器被绑定到一个容器上,可用来向容器插入元素。插入迭代器包括back_inserter, front_inserter, inserter三种。 back_inserter绑定 阅读全文
posted @ 2022-01-11 15:59 恋恋风辰 阅读(152) 评论(0) 推荐(0) 编辑
摘要:向算法传递函数 默认情况下,泛型算法还实现了另外一个版本,就是接受一个额外的参数。比如sort函数,接受第三个参数,第三个参数是一个谓词。 谓词就是一个可调用的表达式,其返回值结果是一个能用作条件的值。 标准库算法所使用的谓词分为两类: 一元谓词(unary predicate,意味着它们只接受单一 阅读全文
posted @ 2022-01-10 17:38 恋恋风辰 阅读(101) 评论(0) 推荐(0) 编辑