![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
Zhao.x
这个作者很懒,什么都没留下…
展开
-
C++命名空间相关解析
使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突。 在多文件编译时,多个全局变量取名重复了,产生了命名冲突,这样的程序在C中,是无法通过编译的。如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了。原创 2017-03-09 11:47:13 · 273 阅读 · 0 评论 -
如何定义一个只能在堆上(栈上)生成对象的类?
在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造转载 2017-07-15 22:42:04 · 192 阅读 · 0 评论 -
链表面试题:判断两个链表是否相交
判断两个链表是否相交,若相交,求交点。(假设链表不带环)判断两个链表是否相交,若相交,求交点。(假设链表可能带环)原创 2017-07-30 20:29:26 · 317 阅读 · 0 评论 -
给定一个整数N,那么N的阶乘N!末尾有多少个0呢?
例如,N=100,那么N!末尾有两个0原创 2017-07-22 22:30:48 · 436 阅读 · 0 评论 -
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。由于数组是向右向下递增的,因此,我们选取左下角为基准值val。 若是target大于val,则列++ 若是target小于val,则行--原创 2017-08-07 16:15:56 · 1642 阅读 · 0 评论 -
将字符串中的空格替换成“%20”
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。1.计算空格数量 2.给出替换之后的字符串长度 3.从后向前修改str原创 2017-08-07 16:44:42 · 515 阅读 · 0 评论 -
C语言模拟实现C++的继承多态
C语言模拟实现C++的继承多态原创 2017-07-31 22:53:33 · 310 阅读 · 0 评论 -
复杂链表的复制
复杂链表:除了有一个指向下一个节点的next指针外,还有一个指向随机节点的random指针原创 2017-07-23 22:41:57 · 199 阅读 · 0 评论 -
链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6
给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6原创 2017-07-25 17:12:46 · 1006 阅读 · 0 评论 -
时间复杂度为O(n)的排序
对数组a进行排序,要求时间复杂度为O(N) 以空间换时间,新建一个数组b,这里假设arr中最大的数字不超过100,b数组全部初始化为0;例如arr中有数据12,则在b中对应的下标位置+1原创 2017-08-06 09:48:13 · 1486 阅读 · 1 评论 -
将N个字符的数组,循环右移K位。时间复杂度O(N)
1.逆序排列 abcd: abcd1234 -> dcba1234;2.逆序排列 1234: dcba1234-> dcba4321;3.全部逆序 dcba4321->1234abcd。原创 2017-08-06 10:58:21 · 1392 阅读 · 0 评论 -
C++类型萃取
在Seqlist中,我们对于内置类型,通过memcopy和memmove这两个方式进行拷贝,自定义类型或string类型我们要通过for循环赋值的方式拷贝。那么系统如何区分是哪种类型呢?虽然通过typeid可以获取变量类型,但是这样获取到的类型,无法用来做变量的声明。因此,我们这里引入类型萃取。#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>u原创 2017-05-15 11:30:05 · 277 阅读 · 0 评论 -
shared_ptr之定制删除器
shared_ptr是用来管理多种资源的,而我们现在往往会误认为用来管理动态开辟的内存空间,像是打开文件(fopen)、malloc等多种情况,也需要shared_ptr来管理,因此,我们便需要定制删除器。template<class T>class Free{ void operate()(T* _ptr) { free(_ptr);原创 2017-05-14 14:35:16 · 855 阅读 · 0 评论 -
shared_ptr
先贴代码:template<typename T>class SharedPtr{public: SharedPtr(T* ptr = 0) :_ptr(ptr) { _count = new int(1); } SharedPtr(const SharedPtr<T>& sp) : _ptr(sp._ptr)原创 2017-05-14 14:13:31 · 218 阅读 · 0 评论 -
类的六个默认成员函数
类中,默认生成六个成员函数:构造函数拷贝构造函数析构函数赋值运算符重载取地址(&)运算符重载const修饰的取地址运算符重载原创 2017-03-19 21:21:22 · 367 阅读 · 0 评论 -
this指针
this指针作为一个隐含参数传递给非静态成员函数,用以指向该成员函数所属类所定义的对象。原创 2017-03-10 23:11:50 · 324 阅读 · 0 评论 -
C++引用与指针
引用:某一变量的别名。与指针类似。原创 2017-03-08 23:27:53 · 300 阅读 · 0 评论 -
C++中的继承
在初次接触到C++语言时,便了解到C++的三个重要特性:封装、继承、多态。 今天便来谈一谈继承。继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称子类或派生类,已经存在的类成为基类或父类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。 通过继承,一个新建的子类从父类那里获得父类的特性。从另一角原创 2017-04-05 16:53:48 · 228 阅读 · 0 评论 -
有关malloc的三个问题
有关于malloc的三个问题,困扰了很久,多处搜查资料,无奈对malloc的底层实现仍然不够透彻,将现阶段所获知的相关内容整理出来,后期再进一步完善。 1.如何知道申请的空间就是所需的空间大小 2.free的时候只给了指针那么如何知道该free多大的空间 3.申请空间的时候怎么知道哪些用了哪些没用。malloc函数是glibc提供的库函数。glibc的内存管理使用的方法是ptmal原创 2017-04-10 17:21:07 · 710 阅读 · 0 评论 -
腾讯笔试题:日期类
分享一道腾讯的笔试题,日期类。 主要还是在实现操作符重载。原创 2017-03-25 22:11:11 · 254 阅读 · 0 评论 -
C++中的多态问题
多态:即多种形态。 我们把具有继承关系的多个类型称为多态类型。 引用或指针的静态类型与动态类型不同这一事实正是c++语言支持多态性的根本所在。对象类型分为静态类型和动态类型。静态类型:对象编译阶段确定类型(又叫早绑定、静态绑定)动态类型:在程序执行阶段确定对象的类型(又叫晚绑定、动态绑定)静态多态:编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推 断出要调用原创 2017-04-13 21:11:16 · 350 阅读 · 0 评论 -
函数模板、类模板
当我们需要通过函数实现同一类而非同一种功能时,往往会通过一下几种方式来实现,但是他们又或多或少存在着各种各样的缺陷: 1.对函数进行重载,针对每个所需相同行为的不同类型重新实现它。 缺陷:一旦有新类型出现,就要重新添加对应函数。 代码的复用率很低 如果只是返回值类型不同,函数重载无法解决 不原创 2017-05-11 11:42:21 · 331 阅读 · 0 评论 -
初识智能指针+模拟auto_ptr
举个例子,当我们动态申请一块内存空间,使用完毕之后也正常释放该内存空间,但是若是在申请与释放中间,我们进行了异常处理,程序直接结束,则将造成内存泄漏。因此,我们引入智能指针。将自己申请的内存空间交给智能指针去处理。RAII(不能等同于智能指针)资源分配及初始化( Resource Acquisition Is Initialization)定义一个类来封装资源的分配和释放一种规范,一种解决问题的思想原创 2017-05-13 10:49:10 · 300 阅读 · 0 评论 -
scoped_ptr
通过上一篇博客,我们发现管理权转移这种方式存在问题较大,接下来我们看一下scoped_ptr。直接贴代码:template<typename T>class ScopedPtr{public: ScopedPtr(T* ptr = 0) :_ptr(ptr) {} T& operator*() { return *_原创 2017-05-13 11:37:13 · 343 阅读 · 0 评论 -
删除小写字母字符串中重复字符
删除小写字母字符串中重复元素原创 2017-08-06 22:07:36 · 930 阅读 · 0 评论