C++ 智能指针 shared_ptr的实现
一.实现思路
记录指针的引用计数。每次被复制时,增加计数。每次被赋值时,左侧计数减少,右侧计数增加,同时检查左侧计数是否为0。
从值构造时,new一块空间,并将计数值设置为1。
每次析构时,检查引用计数是否为0,为0则delete构造时new的空间。
默认构造函数可以构造空共享指[……]
记录指针的引用计数。每次被复制时,增加计数。每次被赋值时,左侧计数减少,右侧计数增加,同时检查左侧计数是否为0。
从值构造时,new一块空间,并将计数值设置为1。
每次析构时,检查引用计数是否为0,为0则delete构造时new的空间。
默认构造函数可以构造空共享指[……]
斐波那契数列是一个常用的用于介绍递归算法的入门题目。但是,实际上,它并不适合用递归计算,因为递归会进行大量重复计算(比如计算Fibonacci(10)实际会计算多次8,7…)。当数量增加时,递归方法所需要的时间会成指数递增。
Fibonacci_Recursive为递归算法,时间复杂度为O[……]
字符串的实现借助于动态数组。到动态数组实现的链接。
字符串在动态数组的基础上,增加了从C风格的字符串(即以’\0’结尾的字符数组)构造和追加的相关函数,隐藏并重新实现了print函数,重载了<<运算符以使字符串能够直接输出到标准输出流。
#ifndef DTS_ST[......]
实现了动态增长空间的数组。当数组原空间不足以存储增加的内容时,会重新开辟数组空间并将数据移动到新空间。默认的增长速度为 原空间*2+1 ,再额外+1是为了防止空数组增长出现一直为空的情况(0*2=0)。
该动态数组实现了常用的接口函数(如size,at,append等),重载了可能常用的运算符[……]
Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twice and return the new length.
Do not alloca[……]
栈和队列的实现借助了链表。到链表实现方法的链接。
继承了dtsList,然后在此基础上增加了push、pop等函数来入出栈或队列,增加了返回 栈底和栈顶 或 队头和队尾 的值的函数。
栈:
#ifndef DTS_STACK_HPP #define DTS_STACK_HP[......]
二叉树结点结构:
template <typename T> class dtsBinaryTreeNode{ public: T value;//该结点值 dtsBinaryTreeNode<T>* leftChild;//左孩子结点 d[......]
题目:
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
Example 1:
Input: 12[……]