恋恋风辰
码龄12年
  • 40,749
    被访问
  • 82
    原创
  • 31,553
    排名
  • 24
    粉丝
关注
提问 私信

个人简介:编程是我的使命,秃头是我的勋章。

  • 加入CSDN时间: 2010-04-11
博客简介:

恋恋风辰的技术博客

查看详细资料
  • 4
    领奖
    总分 535 当月 14
个人成就
  • 获得13次点赞
  • 内容获得7次评论
  • 获得81次收藏
创作历程
  • 24篇
    2022年
  • 22篇
    2021年
  • 24篇
    2020年
  • 12篇
    2019年
成就勋章
TA的专栏
  • C++
    36篇
  • 数据结构和算法
    4篇
  • golang
    24篇
  • docker
    19篇
  • 网络编程
    1篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

C++ 类模板和函数模板

函数模板当我们想要定义一个可以支持泛型的函数时,就要采用函数模板的方式了。所谓泛型就是可以支持多种类型的操作,比如我们定义一个compare操作,他可以根据传递给他的参数类型动态调用对应的函数版本,实现多种类型的比较。template <typename T>int compare(const T &v1, const T &v2){ if (v1 < v2) return -1; if (v2 < v1) re
原创
发布博客 2022.04.30 ·
245 阅读 ·
0 点赞 ·
0 评论

C++ 类的封装继承多态

C++ 特性C++ 三大特性,封装继承多态。我们先实现一个Quote作为基类class Quote{public: Quote() = default; Quote(const std::string &book, double sales_price) { price = sales_price; bookNo = book; } std::string isbn() const { retu
原创
发布博客 2022.04.28 ·
1151 阅读 ·
0 点赞 ·
0 评论

C++ lambda和function

lambda表达式lambda表达式又称为匿名表达式,是C11提出的新语法。[]存储lambda表达式要捕获的值,()内的参数为形参,可供外部调用传值。lambda表达式可以直接调用 // 1 匿名调用 [](string name) { cout << "this is anonymous" << endl; cout << "hello " << name << endl; }("z
原创
发布博客 2022.04.11 ·
578 阅读 ·
0 点赞 ·
0 评论

C++ 运算符重载

C++ 运算符重载
原创
发布博客 2022.04.10 ·
850 阅读 ·
0 点赞 ·
0 评论

C++单例模式的几种实现

本文介绍C++单例模式的集中实现方式,以及利弊局部静态变量方式//通过静态成员变量实现单例//懒汉式class Single2{private: Single2() { } Single2(const Single2 &) = delete; Single2 &operator=(const Single2 &) = delete;public: static Single2 &GetInst() {
原创
发布博客 2022.03.20 ·
1592 阅读 ·
1 点赞 ·
0 评论

二分查找升序序列

问题描述有一个连续的int数组,数组中的数据升序排序,数组中的数据不唯一,有重复数据,要求在数组中查找指定值为target的数据,返回target最小的下标,如果找到返回其最小的下标,如果没有找到,返回-1, 要求用 用二分查找的方式解决上述问题, 要求时间复杂度为Olog(n),空间复杂度为O(1)举例 数组nums = [0,1,1,3,3,4], 查找target为1的数据最小的下标则返回1。如果查找target为100,则返回-1解决思路用二分查找解决上述问题,用一个数组中间的数据和targ
原创
发布博客 2022.03.03 ·
89 阅读 ·
0 点赞 ·
0 评论

C++ 面试常问问题(一)

这篇文章讲解C++ 面试常问的几个问题。本文通过demo讲解初始化列表,继承,字符串等常问问题。看下边这个例子初始化列表//基类class Base{public: Base() : m_nbase(0), m_nbase2(m_nbase + 100) {} Base(int n) : m_nbase(n), m_nbase2(m_nbase + 100) { cout << "this is Base construct " <<
原创
发布博客 2022.03.03 ·
117 阅读 ·
0 点赞 ·
0 评论

C++ 右值引用与移动构造函数

右值与右值引用不能修改的值就是右值,右值一般为临时变量。常见的右值有字面常量值,返回右值的表达式。所谓右值引用就是必须绑定到右值的引用。我们通过&&来获得右值引用。右值引用有一个重要的性质——只能绑定到一个将要销毁的对象。因此,我们可以自由地将一个右值引用的资源“移动”到另一个对象中。void right_references(){ int i = 42; //r 为i的引用,左值引用 int &r = i; //rr 不可以引用左值i,
原创
发布博客 2022.03.01 ·
331 阅读 ·
0 点赞 ·
0 评论

C++ allocator类使用示例

动态内存管理之前我们讲述过动态内存的开辟,可以通过new, malloc,以及alloc等方式,本文通过介绍alloc方式,构造一个StrVec类,这个类的功能类似于一个vector,实现字符串的管理,其中包含push一个字符串,动态扩容,析构,回收内存等操作。StrVec类实现细节StrVec类实现如下class StrVec{public: //无参构造函数 StrVec() : elements(nullptr), first_free(nullptr),
原创
发布博客 2022.02.10 ·
573 阅读 ·
0 点赞 ·
0 评论

C++类的拷贝控制demo

拷贝控制有时候我们需要两个类对象互相关联,当其中一个对象修改后也要关联修改另一个,用这个例子说明拷贝控制的案例。我们有两个类,Message类表示信息类,Folder类表示文件夹类,Message类里有成员folders表示其所属于哪些文件夹。Folder类有成员messages表示其包含哪些messages,所以Folder和Message之间是互相包含,多对多的关系。同时我们要考虑Message类的拷贝,赋值,销毁等操作,如何同步处理其关联的Folder类。其关系图是这样的[外链图片转存失败,
原创
发布博客 2022.02.08 ·
724 阅读 ·
0 点赞 ·
0 评论

C++ swap操作

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 is " << a << endl; cout << "b is " << b
原创
发布博客 2022.01.28 ·
373 阅读 ·
0 点赞 ·
0 评论

C++ 拷贝控制和资源管理

拷贝控制前文我们介绍了HasPtr类的拷贝控制,实现了行为像值的类,所谓行为像值的类就是我们所说的深拷贝,将一个类对象拷贝给另一个类对象时,其所有的成员都作为副本在新的类对象创建一遍,如果是指针类型的成员,则将指针指向的空间的数据复制一份给新对象,这样两个对象所有的成员都不关联,实现了深拷贝,不会受彼此影响。比如之前的HasPtr的拷贝构造HasPtr::HasPtr(const HasPtr &hp){ cout << "this is copy construtor"
原创
发布博客 2022.01.27 ·
882 阅读 ·
0 点赞 ·
0 评论

C++ 拷贝赋值和单例模式

拷贝构造函数一个类可以不定义拷贝构造函数,系统会默认提供一个拷贝构造函数,叫做合成拷贝构造函数。与默认构造函数不同的是,即使我们定义了其他构造函数,系统也会为我们生成合成拷贝构造函数。合成的拷贝构造函数会将其参数的成员逐个拷贝到正在创建的对象中。编译器从给定对象中依次将每个非static成员拷贝到正在创建的对象中。对类类型的成员,会使用其拷贝构造函数来拷贝;内置类型的成员则直接拷贝。为了方便举例,我们手动实现一个mystring类class mystring_{private: /* da
原创
发布博客 2022.01.26 ·
342 阅读 ·
0 点赞 ·
0 评论

利用容器和指针实现文本查询程序

简介本篇利用之前介绍的智能指针,关联容器,顺序容器等知识,做一个文本查询程序。该程序读取文本中的内容,然后根据输入的单词,判断该单词出现多少次,出现在哪些行,每行的句子是什么。比如我们输入elment,输出如下element occurs 112 times(line 36) A set element contains only a key;(line 158) operator creates a new element(line 160) Regardless of whether the
原创
发布博客 2022.01.21 ·
721 阅读 ·
0 点赞 ·
0 评论

C++ 动态数组

C++语言和标准库提供了两种一次分配一个对象数组的方法。C++语言定义了另一种new表达式语法,可以分配并初始化一个对象数组。标准库中包含一个名为allocator的类,允许我们将分配和初始化分离。使用allocator通常会提供更好的性能和更灵活的内存管理能力。new和数组为了让new分配一个对象数组,我们要在类型名之后跟一对方括号,在其中指明要分配的对象的数目。在下例中,new分配要求数量的对象并(假定分配成功后)返回指向第一个对象的指针:int get_size_new(){ ret
原创
发布博客 2022.01.21 ·
1409 阅读 ·
1 点赞 ·
0 评论

智能指针 unique_ptr和weak_ptr

unique_ptrunique_ptr和shared_ptr不同,unique_ptr不允许所指向的内容被其他指针共享,所以unique_ptr是不允许拷贝构造和赋值的。void use_uniqueptr(){ //指向double类型的unique指针 unique_ptr<double> udptr; //一个指向int类型的unique指针 unique_ptr<int> uiptr(new int(42)); // uniqu
原创
发布博客 2022.01.19 ·
398 阅读 ·
0 点赞 ·
0 评论

C++ 智能指针shared_ptr

指针C++提供了对指针操作的方法,当我们用new开辟指定类型的空间后,就生成了一个指针。void use_pointer(){ //开辟整形指针,指向一个值为5的元素 int *pint = new int(5); //开辟指向字符串的指针 string *pstr = new string("hello zack");}通过new + 类型构造的方式可以生成指针对象,但是开辟的指针对象所占用的空间在堆空间上。需要手动回收。可以通过delete 指针对象的方式
原创
发布博客 2022.01.18 ·
791 阅读 ·
0 点赞 ·
0 评论

C++ 关联容器

之前我们介绍过顺序容器,list, vector, queue等,这一篇介绍关联容器, C++关联容器主要有两大类,map和set。mapmap主要是用来管理key,value类型的结构的。void use_map(){ map<string, size_t> word_count; string word; while (cin >> word) { word_count[word]++; } for (co
原创
发布博客 2022.01.14 ·
84 阅读 ·
0 点赞 ·
0 评论

求最长回文串的长度

最长回文串字符串abcbada最长的回文串为abcba,最长回文串保证首尾字符相同,并且去除首尾后的子串也是回文串,如bcb。根据这个规律,ab就不是回文串因为首尾不同。abcbada也不是回文串,因为即使首尾相同,其子串bcbad不是回文串,所以abcbada也不是回文串。动态规划可以通过动态规划解决字符串的最大回文串的长度问题,其根本思路是依次列举出长度为1~n的回文串,最后返回最大长度n即可。动态规划的思路在于找出推导公式:1 首尾元素不同,则不是回文串。2 首尾元素相同,且去除首尾
原创
发布博客 2022.01.12 ·
262 阅读 ·
0 点赞 ·
0 评论

C++ 迭代器分类

除了容器自定义的迭代器之外,标准库还提供了其他几种迭代器,包括插入迭代器,流迭代器,反向迭代器,移动迭代器。插入迭代器迭代器被绑定到一个容器上,可用来向容器插入元素。插入迭代器包括back_inserter, front_inserter, inserter三种。back_inserter绑定到容器后,对该迭代器赋值,就执行了类似于push_back的操作,前提是该容器要支持push_back。front_inserter绑定到容器后,对该迭代器赋值,就执行了类似于push_front的操作,前提
原创
发布博客 2022.01.11 ·
281 阅读 ·
0 点赞 ·
0 评论
加载更多