自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (5)
  • 收藏
  • 关注

原创 条款15:在资源管理类中提供对原始资源的访问

tr1::shared_ptr和tr1::auto_ptr都提供一个get成员函数,返回智能指针内部的原始指针: )operator*和operator->隐式转换至底部指针: 注意:

2015-05-19 21:53:13 483

原创 条款14:在资源管理类中小心coping行为

以对象管理资源之后,某些资源不允许被复制,这时对象应该被private声明,为了资源在最后一次使用之后被释放应该使用shared_ptr并且给出对应的删除器: 注意:

2015-05-18 21:50:16 717

原创 条款13:以对象管理资源

auto_ptr智能指针:其析构函数自动对其所指对象调用delete 若对象auto_ptr不指向某一资源,它会设为null shared_ptr具有相同功能 但是多个shared_ptr对象能同时指向同一资源 注意:

2015-05-18 21:27:19 651

原创 条款12:复制对象时勿忘其每一个成分

对象复制操作operator=或copy构造函数,一定要记得复制对象每一个成份,特别是base class的成分: 注意:

2015-05-18 21:04:41 551

原创 条款11:在operator=中处理“自我赋值”

**如果赋值操作=左右值相等,即自我赋值,传统做法: 证同策略:** 为防止new异常,需要在new之前不删除原先的引用: swap技术的运用: 当传递的是值不是引用时同样可用swap: 注意:

2015-05-18 20:30:16 548

原创 条款10:令operator=返回一个reference to *this

下面是示例:

2015-05-12 22:42:08 607

原创 条款09:绝不在构造和析构过程中调用virtual函数

在base构造期间virtual函数不是virtual函数,因为构造函数首先从base构造函数开始执行,执行的时候继承类的对象并没有也就无从调用其成员函数,用以下这种方式能解决问题: 上面的做法,在要对继承类使用构造函数的时候通过参数传递给base构造函数。注意:

2015-05-12 22:38:03 590

原创 条款08:别让异常逃离析构函数

**在调用析构函数中出现的异常有两种方法: 一是调用abort强制结束程序:** 二是吞下异常: **更好的办法是: 针对某一个可能在析构函数中出现异常的部分,为用户提供该部分函数的调用放法从而给用户处理异常的机会:** 注意:

2015-05-12 21:54:46 581

原创 条款07:为多态基类声明virtual析构函数

如果使用到了多态,则需要在base class中写一个虚析构函数目的是销毁继承类: 上面的base class通常有其他虚成员函数。如果类中没有虚成员函数,也就是类不打算作为base class使用则在类中写了个虚析构函数是错误的: 注意:

2015-05-12 21:41:21 568

原创 条款06:若不想使用编译器自动生成的函数,就该明确拒绝

private声明copy函数和=赋值,更好的办法是用一个包含private copy或赋值运算符= 的基类,令用户类继承该基类:

2015-05-08 17:51:29 375

原创 条款05:了解C++默默编写并调用哪些函数

编译器在检测到有对象创建、赋值或者以copy构造函数的方式创建对象时会自动生成函数:

2015-05-08 17:12:05 586

原创 条款04:确定对象被使用前已先被初始化

**用成员初值列初始化成员对象: 我们习惯上的错误** 用default构造函数的方法初始化 non-local-static非成员函数内部静态变量初始化先后有要求的,则其初始化需要一个“仿真函数”: 注意:

2015-05-08 16:35:03 624

原创 条款03:尽可能使用const

指向常量的指针、常量指针、指向常量的常量指针 迭代器的功能就像指针,以下是常量指针、指向常量的指针 const与non-const成员函数会被重载 最好这么表述: const成员函数不能改变所有成员变量,但是如果想改变的话可以用下面方法: 用non-const成员函数去调用const成员函数: 注意:

2015-05-08 16:16:38 688

原创 条款02:尽量以const,enum,inline替换#define

1.内置类型用const替换#include 2.字符串类型用const的两种方式 3.数组的大小最好用enum这样给出 4.宏表达式#define CALL_WITHMAX(a,b) f((a)>(b))?(a):(b))可以替换为: 注意:

2015-05-08 15:49:56 581

原创 条款01:视C++为一个语言联邦

C++可以看做包括以下次语言: C-based 面向对象C++ C++模板 标准模板库

2015-05-08 15:29:44 577

原创 利用三星S3C6410源码实现同时压缩视频和图片

前段时间实现了利用三星S3C6410一边压缩视频生成H264文件一边抓取并压缩生成jpg图片。核心步骤如下:视频压缩和图片压缩利用同一个handle。 /* Codec set */ /* Get capability */ ret = ioctl(cam_c_fp , VIDIOC_QUERYCAP, &cap);一边压缩视频:if(frame_count == 1)

2015-05-05 13:21:34 1004

原创 解决三星ARM11开发板图片采集程序源码出现的Bug

三星公司提供的图片采集程序源码是这个:/***************** Capture Thread *****************/void capture_thread(void){ int start, ret; int key; start = 1; ret = ioctl(cam_c_fp, VIDIOC_STREAMON, &start);

2015-05-05 12:59:06 708

原创 解决三星ARM11开发板摄像头采集程序源码出现的Bug

市面上比较流行的飞凌OK6410A/飞凌OK6410B或者是友善之臂的arm11开发板亦或是华天正的arm11开发板使用的都是三星公司的32位CPU。 前阵子发现了这些开发板视频采集方面存在的共同Bug:当用MFC压缩摄像头采集的H264视频的时候,由于这些开发板用的是三星公司提供的摄像头压缩源码,这个源码存在一个Bug,在采集视频的时候输入“e”采集视频,输入“x”退出采集,可是连续采集视频的时

2015-05-05 12:21:50 894

原创 2015年阿里巴巴实习生面试经验

前阵子实习生面试阿里巴巴蚂蚁金服很幸运的被录用了,感觉这次能进阿里实习百分之三十靠实力,百分之四十靠运气,还有百分之三十靠临场发挥吧。总结的经验如下: 1. 简历是很重要的部分,把简历写好。L君是阿里2015年的新员工,是我朋友的朋友,本来要他内部推荐我的,但是由于某些原因没能推荐我。幸运的是他给我修改了我的简历,而且很认真的修改了三次,凭借他的经验我的简历写的很细致,突出自我编程能力明显。所以

2015-05-04 14:19:04 849

原创 GraphMatrix::DFS深度优先搜索

template <typename Tv, typename Te> //深度优先搜索DFS算法(全图)void Graph<Tv, Te>::dfs(int s) { //assert: 0 <= s < n reset(); int clock = 0; int v = s; //初始化 do //逐一检查所有顶点 if (UNDISCOVERED == status

2015-06-05 16:02:51 767

原创 GraphMatrix::BFS广度优先搜索

查找某一结点的邻居: virtual int firstNbr(int i) { return nextNbr(i, n); } //首个邻接顶点 virtual int nextNbr(int i, int j) //相对于顶点j的下一邻接顶点 { while ((-1 < j) && (!exists(i, --j))); return j; } //逆向线性试探(改用邻接表可提

2015-06-05 11:52:58 737

原创 GraphMatrix::构造、析构、插入、删除

构造析构: GraphMatrix() { n = e = 0; } //构造 ~GraphMatrix() { //析构 for (int j = 0; j < n; j++) //所有动态创建的 for (int k = 0; k < n; k++) //边记录 delete E[j][k]; //逐条清除 }插入删除顶点:

2015-06-02 14:49:25 1290

原创 GraphMatrix::图的定义

图的抽象基类:typedef enum { UNDISCOVERED, DISCOVERED, VISITED } VStatus; //顶点状态typedef enum { UNDETERMINED, TREE, CROSS, FORWARD, BACKWARD } EStatus; //边状态template <typename Tv, typename Te> //顶点类型、边类型clas

2015-06-02 14:02:58 1632

原创 BinTree::遍历

template <typename VST> //操作器 void travLevel(VST& visit) { if (_root) _root->travLevel(visit); } //层次遍历 template <typename VST> //操作器 void travPre(VST& visit) { if (_root) _root->travPre(visit

2015-06-01 16:46:00 1066

原创 BinTree::构造、析构、插入、删除

构造析构: BinTree() : _size(0), _root(NULL) { } //构造函数 ~BinTree() { if (0 < _size) remove(_root); } //析构函数插入: BinNodePosi(T) insertAsRoot(T const & e); //插入根节点 BinNodePosi(T) insertAsLC(BinNodePo

2015-06-01 15:45:39 1778

原创 BinTree::定义

二叉树结点定义:#define BinNodePosi(T) BinNode<T>* //节点位置#define stature(p) ((p) ? (p)->height : -1) //节点高度(与“空树高度为-1”的约定相统一)typedef enum { RB_RED, RB_BLACK} RBColor; //节点颜色template <typename T> struct BinNo

2015-05-31 13:18:30 2628

原创 Queue::定义

Queue继承于List:#include "../List/List.h" //以List为基类template <typename T> class Queue: public List<T> { //队列模板类(继承List原有接口)public: //size()、empty()以及其它开放接口均可直接沿用 void enqueue(T const& e) { insertAsLa

2015-05-31 10:20:13 712

原创 Stack::定义

借助Vector实现栈,栈顶是向量末尾,栈底是向量起始:#include "../Vector/Vector.h" //以向量为基类,派生出栈模板类template <typename T> class Stack: public Vector<T> { //将向量的首/末端作为栈底/顶public: //size()、empty()以及其它开放接口,均可直接沿用 void push(T

2015-05-29 15:05:37 1051

原创 List::find、search

无序查找:template <typename T> //在无序列表内节点p(可能是trailer)的n个(真)前驱中,找到等于e的最后者ListNodePosi(T) List<T>::find(T const& e, int n, ListNodePosi(T) p) const { //0<=n<=rank(p)<_size while (0 < n--) //对于p的最近的n个前驱,

2015-05-29 14:50:35 728

原创 List::去重,倒置

无序去重:template <typename T> int List<T>::deduplicate() { //剔除无序列表中的重复节点 if (_size < 2) return 0; //平凡列表自然无重复 int oldSize = _size; //记录原规模 ListNodePosi(T) p = header; Rank r = 0; //p从首节点开始 wh

2015-05-29 14:46:09 927

原创 List::sort排序

template <typename T> void List<T>::sort(ListNodePosi(T) p, int n) { //列表区间排序 switch (rand() % 3) { //随机选取排序算法。可根据具体问题的特点灵活选取或扩充 case 1: insertionSort(p, n); break; //插入排序 case 2: sele

2015-05-29 14:24:19 732

原创 List::traverse遍历

声明:// 遍历 void traverse(void (*)(T&)); //遍历,依次实施visit操作(函数指针,只读或局部性修改) template <typename VST> //操作器 void traverse(VST&); //遍历,依次实施visit操作(函数对象,可全局性修改)定义:template <typename T> void List<T>::tra

2015-05-28 23:01:38 10161

原创 List::insert remove

各种插入操作:template <typename T> //将e紧靠当前节点之前插入于当前节点所属列表(设有哨兵头节点header)ListNodePosi(T) ListNode<T>::insertAsPred(T const & e) { ListNodePosi(T) x = new ListNode(e, pred, this); //创建新节点 pred->succ =

2015-05-28 22:44:15 750

原创 List::构造、复制构造、析构

构造函数:默认构造函数: 构造一个空列表:template <typename T> void List<T>::init() { //列表初始化,在创建列表对象时统一调用 header = new ListNode<T>; //创建头哨兵节点 trailer = new ListNode<T>; //创建尾哨兵节点 header->succ = trailer; header-

2015-05-28 22:32:11 995

原创 List::定义

结点的定义:typedef int Rank; //秩#define ListNodePosi(T) ListNode<T>* //列表节点位置template <typename T> struct ListNode { //列表节点模板类(以双向链表形式实现)// 成员 T data; ListNodePosi(T) pred; ListNodePosi(T) succ; //数值、前

2015-05-28 16:19:52 1447

原创 Vector::find、search查找

无序向量区间查找:template <typename T> //无序向量的顺序查找:返回最后一个元素e的位置;失败时,返回lo - 1Rank Vector<T>::find(T const & e, Rank lo, Rank hi) const { //assert: 0 <= lo < hi <= _size while ((lo < hi--) && (e != _elem[hi]

2015-05-25 15:39:42 1254

原创 Vector::去重、置乱

无序去重:template <typename T> int Vector<T>::deduplicate() { //删除无序向量中重复元素(高效版) int oldSize = _size; //记录原规模 Rank i = 1; //从_elem[1]开始 while (i < _size) //自前向后逐一考查各元素_elem[i] (find(_elem[i]

2015-05-25 14:27:34 1310

原创 Vector::sort排序

template <typename T> void Vector<T>::sort(Rank lo, Rank hi) { //向量区间[lo, hi)排序 switch (rand() % 5) { //随机选取排序算法。可根据具体问题的特点灵活选取或扩充 case 1: bubbleSort(lo, hi); break; //起泡排序 case 2: sel

2015-05-24 21:48:41 683

原创 Vector::traverse遍历

对Vector元素进行遍历,将遍历结果交由传递的函数使用:template <typename T> void Vector<T>::traverse(void (*visit)(T &)) //利用函数指针机制的遍历{ for (int i = 0; i < _size; i++) visit(_elem[i]); }template <typename T> template <typenam

2015-05-21 14:38:16 3187 1

原创 Vector::insert remove

首先看看vector不同于数组的一个地方:可以根据数据的多少扩容: 至于这里为什么要是扩充一倍,因为扩容函数执行也需要时间开销,当以增加一倍扩容时调用扩容的概率和容量的匹配要更好:template <typename T> void Vector<T>::expand() { //向量空间不足时扩容 if (_size < _capacity) return; //尚未满员时,不必扩容

2015-05-19 22:23:37 729

Android局域网对讲系统的实现

Android局域网对讲系统,实现局域网内语音对讲功能,Android版 有小BUG 但是能正常工作

2014-09-17

YUV420转YUV422

下载该资源,需要其他YUV420 转YUV422资料的下载该资源后私信我

2014-09-03

c#基于TCP的文件传输,可实现传送多个文件,选择保存路径

资源简单易懂有用欢迎大家踊跃下载,花了不少时间完成的

2014-09-03

百度地图点击地图将该处经纬度存入文件

百度地图API应用,获取经纬度存入文件

2013-12-21

科技奖励评价系统

想了解C#结合access编程的可以下载此应用软件安装,安装完后如果对你有帮助可留下邮箱,无保留传送源代码。安装过程可能360会报警,请关掉360安装。

2013-12-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除