<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Smart的专栏]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/SmartBrave</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; SmartBrave]]></copyright><item><title><![CDATA[lua学习笔记.md]]></title><link>https://blog.csdn.net/SmartBrave/article/details/71136521</link><guid>https://blog.csdn.net/SmartBrave/article/details/71136521</guid><author>SmartBrave</author><pubDate>Wed, 03 May 2017 18:52:01 +0800</pubDate><description><![CDATA[lua也是一门强大的语言，现将学习笔记简要记录如下：
变量lua中的变量默认总是全局的，除非用local声明它。变量没有类型，值才有类型。一个变量在未使用时它的值为nil，同理可将一个已经使用完毕的变量赋值为nil，就删除了这个变量。
类型 
 lua中总共有8种类型，如下：  类型
  描述  nil
  该类型的值只有一个，即nil
  boolean
  布尔类型，有true和false两种值]]></description><category></category></item><item><title><![CDATA[继承体系下C++对象模型.md]]></title><link>https://blog.csdn.net/SmartBrave/article/details/71136167</link><guid>https://blog.csdn.net/SmartBrave/article/details/71136167</guid><author>SmartBrave</author><pubDate>Wed, 03 May 2017 18:35:27 +0800</pubDate><description><![CDATA[一直对C++继承体系中对象的内存分布和实现原理不甚了解，故花了点时间复习整理了一下，如下：C++的继承关系可分为如下几种情况：
单一的一般继承(带成员变量，虚函数，虚函数覆盖)
多重继承(带成员变量，虚函数，虚函数覆盖)
菱形继承(带成员变量，虚函数，虚函数覆盖)
菱形虚拟继承(带成员变量，虚函数，虚函数覆盖)
下面分别来讨论：单一的一般继承这个没什么好说的，基类中有虚函数，所以编译器为其产生了虚表]]></description><category></category></item><item><title><![CDATA[虚拟存储器]]></title><link>https://blog.csdn.net/SmartBrave/article/details/52227746</link><guid>https://blog.csdn.net/SmartBrave/article/details/52227746</guid><author>SmartBrave</author><pubDate>Wed, 17 Aug 2016 09:16:36 +0800</pubDate><description><![CDATA[今天上午看了《深入理解计算机系统》中关于虚拟存储器的章节，记录如下：首先说为什么要有虚拟存储器我个人觉得虚拟存储器的概念是和进程概念一起出现的。在计算机技术发展的早期，只有单道批处理系统，特点是一次只能运行一个进程，只有运行完毕后才能将下一个进程加载到内存里面，所以进程的数据都是直接放在物理内存上的。到后来发展出了多道程序系统，它要求在计算机中存在着多个进程，处理器需要在多个进程间进行切换。这时候就]]></description><category></category></item><item><title><![CDATA[浅剖智能指针----auto_ptr]]></title><link>https://blog.csdn.net/SmartBrave/article/details/52183787</link><guid>https://blog.csdn.net/SmartBrave/article/details/52183787</guid><author>SmartBrave</author><pubDate>Fri, 12 Aug 2016 09:47:46 +0800</pubDate><description><![CDATA[刚刚在复习的时候遇到了智能指针，就一时兴起去找出了智能指针的源码看了看，现将我对auto_ptr的理解记录如下： 
Linux下，auto_ptr源码在/usr/include/c++/4.4.7/backword/auto_ptr.hauto_ptr本身是一个模板类，封装了一个原生指针。它最大的特点是在拷贝构造、赋值、传参等过程中对原生指针控制权的转移，即会将自己所管理的指针release掉，并赋]]></description><category></category></item><item><title><![CDATA[浅谈STL]]></title><link>https://blog.csdn.net/SmartBrave/article/details/52183693</link><guid>https://blog.csdn.net/SmartBrave/article/details/52183693</guid><author>SmartBrave</author><pubDate>Thu, 11 Aug 2016 16:13:57 +0800</pubDate><description><![CDATA[由于我刚开始学习系统的写博客，个人方面不管是能力还是经验都会有所欠缺，所以肯定会有很多不完善的地方，包括结构安排、要点遗漏、知识错误等等，还请各位批判着看，如有问题，恳请斧正，我将十分感激！STL是一个标准规范，它只是为各种组件定义了一系列统一的访问接口及他们之间搭配使用的一般规则，而没有规定他们的底层实现。因此各开发商都提供自己的STL版本，比较著名的有P.J. Plauger，HP，SGI等。如]]></description><category></category></item><item><title><![CDATA[所有HTTP返回码]]></title><link>https://blog.csdn.net/SmartBrave/article/details/52183624</link><guid>https://blog.csdn.net/SmartBrave/article/details/52183624</guid><author>SmartBrave</author><pubDate>Thu, 11 Aug 2016 16:07:55 +0800</pubDate><description><![CDATA[1xx消息:请求已被接受，需要继续处理。HTTP/1.0协议中没有定义任何1xx状态码。 
100 Continue 客户端应当继续发送剩余请求。 
101 Switching Protocols 服务器已经理解了客户端的请求，并将通过Upgrade消息头通知客户端采用不同的协议来完成这个请求。 
102 Processing 处理将被继续执行。
2xx成功:请求已成功被服务器接收、理解并接受。]]></description><category></category></item><item><title><![CDATA[一个简单的Vector实现]]></title><link>https://blog.csdn.net/SmartBrave/article/details/52183318</link><guid>https://blog.csdn.net/SmartBrave/article/details/52183318</guid><author>SmartBrave</author><pubDate>Thu, 11 Aug 2016 15:44:14 +0800</pubDate><description><![CDATA[众所周知，STL库以高效而闻名。而且使用它可以很方便的实现我们的主要逻辑，不需要关心各种底层的实现细节。本文模拟实现了一个简单的vector容器。关于vector的介绍请移步：浅谈STL。 
代码如下：#ifndef _VECTOR_
#define _VECTOR_#include<iostream>
#include<assert.h>
#include<memory.h>
using name]]></description><category></category></item><item><title><![CDATA[一个简单的List实现]]></title><link>https://blog.csdn.net/SmartBrave/article/details/52183300</link><guid>https://blog.csdn.net/SmartBrave/article/details/52183300</guid><author>SmartBrave</author><pubDate>Thu, 11 Aug 2016 15:43:10 +0800</pubDate><description><![CDATA[list和vector是STL库中两个最基本的容器，以下代码模拟实现一个简单的list：#ifndef _MYLIST_
#define _MYLIST_#include<iostream>
using namespace std;class ListIsEmpty{};
class ArgIsIll{};template<typename T>
class Node{
public:
    No]]></description><category></category></item><item><title><![CDATA[一个简单的Heap实现]]></title><link>https://blog.csdn.net/SmartBrave/article/details/52183278</link><guid>https://blog.csdn.net/SmartBrave/article/details/52183278</guid><author>SmartBrave</author><pubDate>Thu, 11 Aug 2016 15:42:09 +0800</pubDate><description><![CDATA[以下代码实现了一个堆，可以传入仿函数来决定生成最大堆或最小堆。#ifndef _HEAP_
#define _HEAP_#include"../Vector/Vector.h"
#include<string>
using namespace std;template<typename T>
class Less{
public:
    bool operator()(const T& t1,co]]></description><category></category></item><item><title><![CDATA[一个简单的Stack实现]]></title><link>https://blog.csdn.net/SmartBrave/article/details/52183250</link><guid>https://blog.csdn.net/SmartBrave/article/details/52183250</guid><author>SmartBrave</author><pubDate>Thu, 11 Aug 2016 15:41:00 +0800</pubDate><description><![CDATA[stack的特性不用多说了吧，先进后出。底层可以用vector或list实现。#define _STACK_#include<iostream>
#include"../List/MyList.h"
using namespace std;class StackIsEmpty{};template<typename T>
class MyStack{
public:
    MyStack():my]]></description><category></category></item><item><title><![CDATA[一个简单的Deque实现]]></title><link>https://blog.csdn.net/SmartBrave/article/details/52183231</link><guid>https://blog.csdn.net/SmartBrave/article/details/52183231</guid><author>SmartBrave</author><pubDate>Thu, 11 Aug 2016 15:39:31 +0800</pubDate><description><![CDATA[一个双向队列,底层使用list实现，因为list在push_back,push_front,pop_back,pop_front这些函数中效率较高。#ifndef _DEQUE_
#define _DEQUE_#include<iostream>
#include"../List/MyList.h"template<typename T>
class Deque{
public:
    Deque]]></description><category></category></item><item><title><![CDATA[一个简单的优先级队列实现]]></title><link>https://blog.csdn.net/SmartBrave/article/details/52183204</link><guid>https://blog.csdn.net/SmartBrave/article/details/52183204</guid><author>SmartBrave</author><pubDate>Thu, 11 Aug 2016 15:37:59 +0800</pubDate><description><![CDATA[优先级队列底层使用堆来实现。因为堆可以在O(1)的时间内找出优先级最高的元素。 
代码如下：#ifndef _PRIORITY_
#define _PRIORITY_#include<iostream&gt;
#include"../Heap/Heap.h"
using namespace std;template<typename T,typename U&gt;
class PriorityQu]]></description><category></category></item><item><title><![CDATA[一个简单的哈希表实现]]></title><link>https://blog.csdn.net/SmartBrave/article/details/52183182</link><guid>https://blog.csdn.net/SmartBrave/article/details/52183182</guid><author>SmartBrave</author><pubDate>Thu, 11 Aug 2016 15:36:33 +0800</pubDate><description><![CDATA[哈希算法可以说是效率比较高的一种算法了，基本上时间复杂度为O(1)。但哈希有个坑爹的地方就是冲突的问题。当发生冲突时，有两种解决办法： 
* 线性探测 
* 哈希桶法具体算法不再解释，以下代码使用STL中vector和list实现了一个基于哈希桶的哈希表。 
代码如下：#pragma once#include<iostream>
#include<vector>
#include<list>
usi]]></description><category></category></item><item><title><![CDATA[一个简单的二叉树实现]]></title><link>https://blog.csdn.net/SmartBrave/article/details/52183030</link><guid>https://blog.csdn.net/SmartBrave/article/details/52183030</guid><author>SmartBrave</author><pubDate>Thu, 11 Aug 2016 15:24:09 +0800</pubDate><description><![CDATA[众所周知，二叉树是一种很重要的数据结构，基于二叉树的哈夫曼树可用于文件压缩，BSTreet、AVLTree可用于排序，RBTree被广泛用在STL中的map,set等容器上和Java中的TreeSet和TreeMap上。 
二叉树的节点结构：template<typename T>
struct BinaryTreeNode
{
    T _data;
    BinaryTreeNode<T>*]]></description><category></category></item><item><title><![CDATA[一个简单的二叉搜索树实现]]></title><link>https://blog.csdn.net/SmartBrave/article/details/52183015</link><guid>https://blog.csdn.net/SmartBrave/article/details/52183015</guid><author>SmartBrave</author><pubDate>Thu, 11 Aug 2016 15:23:20 +0800</pubDate><description><![CDATA[上一篇文章简单实现了一个普通的二叉树，参见这里。 
二叉搜索树是二叉树的一种变体，它相比普通二叉树的特性就是里面的数据都是有序的，中序遍历它就可以得到一个升序数组。BSTreet实现代码如下：#pragma onceinclude<iostream>using namespace std;template<typename T> 
struct BSTreeNode 
{ 
    T _data;]]></description><category></category></item><item><title><![CDATA[一个简单的AVL树实现]]></title><link>https://blog.csdn.net/SmartBrave/article/details/52182999</link><guid>https://blog.csdn.net/SmartBrave/article/details/52182999</guid><author>SmartBrave</author><pubDate>Thu, 11 Aug 2016 15:22:29 +0800</pubDate><description><![CDATA[上一篇文章实现了一个最简单的二叉搜索树，里面理由两个成员函数：插入和中序遍历。我觉得，插入应该算是BSTreet中最核心的一个函数了。 
二叉搜索树虽然是一颗排序树，但当数据的插入顺序基本逆序时，BSTreet就退化为一个很近似链表的结构。而链表中查找的时间复杂度为O(n)，显然这失去了二叉搜索树O(lgN)的优势。 
因此我们可以对BSTree进行改进，使之成为一个平衡的二叉搜索树，即AVL树。]]></description><category></category></item><item><title><![CDATA[冒泡排序]]></title><link>https://blog.csdn.net/SmartBrave/article/details/52182985</link><guid>https://blog.csdn.net/SmartBrave/article/details/52182985</guid><author>SmartBrave</author><pubDate>Thu, 11 Aug 2016 15:21:35 +0800</pubDate><description><![CDATA[冒泡排序可以说是最简单的一种排序了，其核心思想是： 
* 每次比较相邻的两个数，若后面的比前面大，则交换之； 
* 重复以上步骤，直到所有数都有序为止。代码如下：template<typename T>
void BubbleSort(vector<T>& v)
{
    int length=v.size();
    int i,j;
    for(i=0;i<length;++i)]]></description><category></category></item><item><title><![CDATA[选择排序]]></title><link>https://blog.csdn.net/SmartBrave/article/details/52182978</link><guid>https://blog.csdn.net/SmartBrave/article/details/52182978</guid><author>SmartBrave</author><pubDate>Thu, 11 Aug 2016 15:20:47 +0800</pubDate><description><![CDATA[我个人认为冒泡排序和选择排序真是一对孪生兄弟，因为我总感觉这两个算法的思想很像，时间复杂度也相同。但其实他们的算法思想是不同的。冒泡排序是从前往后逐个比较相邻的元素，从而使得最大的元素”冒”到数组的最右边。 
而选择排序则是将某一个元素与其余所有元素相比较，选出一个最小/最大的元素放在当前位置。 
代码如下：template<typename T>
void SelectSort(vector<T>]]></description><category></category></item><item><title><![CDATA[求给定数组的最大子数组]]></title><link>https://blog.csdn.net/SmartBrave/article/details/52182919</link><guid>https://blog.csdn.net/SmartBrave/article/details/52182919</guid><author>SmartBrave</author><pubDate>Thu, 11 Aug 2016 15:17:34 +0800</pubDate><description><![CDATA[话说前天晚上被网易虐的也是够惨，3道编程题做出来两道，一个运行超时，一个通过率为70%。其实考的是动态规划之类的东西，只可惜我当时没有好好学。虽然牛客网服务器挂了导致考试延长一个小时，但这对我并没有什么实质帮助，不会还是不会呀。 
今天开始啃《算法导论》，每天一个算法，坚持！ 
简单看了下分治这一节，照着书上的思想敲出了”给定数组的最大子数组”的代码，如下：int FindMidMaxSum(con]]></description><category></category></item><item><title><![CDATA[KMP算法]]></title><link>https://blog.csdn.net/SmartBrave/article/details/52182900</link><guid>https://blog.csdn.net/SmartBrave/article/details/52182900</guid><author>SmartBrave</author><pubDate>Thu, 11 Aug 2016 15:16:16 +0800</pubDate><description><![CDATA[众所周知，KMP算法的作用是匹配字符串，比如在一个文本编辑器中查找符合某一模式的所有字符等。 
就我认为，这个算法还是比较难的，反正我是看了好长时间都没懂，哈哈~ 
昨天说了，每天一个算法，坚持下去！ 
今天看了《算法导论》中关于该算法的部分，对求next数组部分不是特别理解，参考了网上的某些文章，不过他这篇文章的分析确实不错，但代码部分有些缺陷，我已改正过来。简要记录如下：普通的暴力匹配算法是将模]]></description><category></category></item></channel></rss>