
C++
文章平均质量分 73
codedoctor
正在学习计算机相关
展开
-
C++ 多线程处理求和问题
C++ 11 的新标准支持了被封装的多线程库,虽然已经学过了C++ 的<thread>,但是今天想到用多线程处理一下求和的问题。 OK现在就直接先把代码贴出来吧 PS:由于每个人的电脑的CPU核数都不同,我的电脑就是一台很烂的笔记本(双核,除了打代码和扫雷没什么其他东西),众所周知,并行的时候如果线程超过cores会引起频繁的上下文切换,这样反而会降低性能,所以最好不要用超过你cores数目的线原创 2017-06-09 21:12:35 · 3236 阅读 · 0 评论 -
【C++】STL的重写
最近在写一个注释比较靠谱的STL项目,由本人独立编写,参考书籍为《Effective C++》、《C++ Primer》、《STL源码剖析》等 准备完成的内容为: - 大部分的容器 - 大部分的泛型算法 - 空间配置器 - 适配器 - 型别萃取器 - 迭代器现在已经实现了如下的东西:型别萃取、vector、Alloc空间配置器、迭代器型别萃取、一些泛型算法(后期才会着重编写原创 2017-08-19 22:18:15 · 1158 阅读 · 0 评论 -
【C++】动态内存管理(二)以对象管理资源
为什么要用对象去管理资源? 考虑如下情况。 我们声明一个对象A:class A {private: int value;public: A(int v):value(v) {}; A() { cout << "creat A" << endl; } ~A() { cout << "delete A" << e原创 2017-07-28 16:02:23 · 439 阅读 · 0 评论 -
【C++】动态内存管理(三)不同的资源管理对象的实现
这里我就直接贴代码然后进行说明了。拷贝型资源管理对象对于普适性的资源,比如string、vector、array等资源,我们通常采用拷贝的方式进行资源的赋值操作 下面是这种资源管理对象的基本构造: template<typename T> class Data { private: T* pointer; public: Dat原创 2017-07-28 16:41:12 · 410 阅读 · 0 评论 -
基于C++与Opencv制作的简单马里奥游戏
本游戏是今年夏天暑假的一项选拔的大作业,记得当时用了差不多整整十天的时间,每天编程时间都在十个小时左右。由于基础的不足,经历了很多的修改和重做。中间的不同版本记得一共有4个,第一个是完全的一整个主函数和一堆功能函数的设计,现在想起来还是有点好笑,当时对C++不太了解,也不太熟悉C++的面向对象的设计,还是在c的基础上思考问题。也是很尴尬,但幸好及时悬崖勒马,花了一天学完了C++的类和一些基本操作,才原创 2016-11-14 21:49:15 · 10747 阅读 · 11 评论 -
【C++】不能将“this”指针从“const vector”转换为“vector & rhs"
最近在写STL,在对stack的swap函数进行测试的时候,出现了这个问题,由于是第一次见,我独自想了很久也有点迷糊,搜索调试弄了半天终于解决了,以下是出问题的代码: template<class T, class Alloc> bool vector<T, Alloc>::operator ==(const vector& rhs)const { if (size()原创 2017-09-06 17:26:36 · 2246 阅读 · 0 评论 -
【C++】 深入探究 new 和 delete
在C++中,我们应该经常会用到new、delete,它们是C++的一个关键字,同时也是一个操作符,下面我将我对这两者的了解和学习做一个总结和探讨。new和delete的全过程首先我们定义一个对象A: struct A { size_t h; };当我们使用关键字new在堆上动态创建一个对象A时,比如 A* p = new A(),它实际上做了三件事:向堆上申请一块内存原创 2017-07-27 14:29:38 · 13102 阅读 · 1 评论 -
对C++中的this指针的分析
一个示例首先让我们观察如下代码:namespace ClassTest { class A { private: int m_int1; int m_int; static int st_int; public: void test1() { cout << "test1" << endl; }原创 2017-09-25 18:01:48 · 617 阅读 · 0 评论 -
STL中的空间配置器allocator的实现原理及源码剖析
allocator是STL为自己的模版容器所设计的标准空间配置器。处于std命名空间下 今天我要讲的的allocator的源码在我的github上,地址为 mySTL 是我模仿标准STL写出的代码,并添加了注释。allocator简介allocator为一个模版类,我们使用的时候一般都会将其绑定到一个具体的类型上。如下:allocator<int> alc;allocator大致需要实现如下功能:原创 2017-09-27 11:21:53 · 3905 阅读 · 1 评论 -
STL中的deque及源码实现 std::deque
本博客中涉及到的所有代码均在我的github上存放,地址:mySTL如果有兴趣的话可以去下载查看,注释比较详尽。说点什么相信大家如果对C++有一定的了解的话,都会知道C++中有STL这个超大的模版库,这个模版库提供了非常多的模版容器和模版算法,如常用的vector、list、stack、queue、map、set等等容器,sort、find_if、find、swap等模版函数 这个库由于创建时间过原创 2017-09-26 21:16:47 · 7667 阅读 · 2 评论 -
【C++】动态内存管理(一)成对使用new和delete时要采取相同形式
前面我已经非常详细地写了关于new和delete的底层实现原理,这里就讲一下比较轻松的,如何合理地去使用new和delete 和为什么要如此。 如果看完之后还有兴趣继续探究,可以去看我前面的博客——【C++】 深入探究 new 和 delete我们都知道,用new操作符分配单个对象的内存和分配数组对象的方式是不同的,同样,delete操作符针对不同new方式分配的对象也要采用不同的delete方式原创 2017-07-27 21:19:43 · 613 阅读 · 0 评论 -
探究C++中的成员函数指针和虚函数表
say something相信对C++对象有一定了解的话,应该都会知道,在C++中对象的实现中,成员函数和成员变量是分离的 所以我们所谈到的非静态成员函数其实只是一个普通的函数(不过被编译器所隐藏,必须绑定到特定的对象上才能执行) 静态成员函数实际上就真的就是一个普通的函数,独立于整个对象之外,不过被编译器加上了一堆修饰避免重命名,和对象无关 普通非静态成员函数的实现是通过传入this指针的方原创 2017-10-17 13:51:57 · 1347 阅读 · 3 评论 -
【分析】深入探究 C++ 引用
争论 在 c/c++ 中,访问一个变量只能通过两种方式被访问,传递,或者查询。这两种方式是: 通过值 访问 / 传递变量 通过地址 访问 / 传递变量 – 这种方法就是指针 关于引用,我翻看了一些网上的博客和外文文章,看到两种观点:引用为一个参数的别名(当然,C++ primer 上也是这么说的)引用其实就是一个常量指针,指向这个对象(所以必须被初始化才能使用,和常翻译 2017-07-09 11:30:08 · 396 阅读 · 0 评论 -
iostream 缓冲区详解(cin和cout)
缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。 缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。缓冲区的类型 缓冲区 分为三种类型:全缓冲、行缓冲和不带缓冲。 1、全缓冲 在这种情况下,当填满标准I/O缓存后才进行实际I/O操作。全缓冲的典型代表是对磁盘文件的原创 2017-12-24 17:59:23 · 7646 阅读 · 6 评论 -
C++中的仿函数functor
引子先考虑一个简单的例子:假设有一个vector&lt;string&gt;,你的任务是统计长度小于5的string的个数,如果使用count_if函数的话,你的代码:bool LessThan5Function(const string&amp; str) {//寻找长度小于5的字符串 return str.length() &lt; 5;}void test() {...原创 2018-03-22 15:21:24 · 3047 阅读 · 3 评论 -
【C++】new和delete面对简单类型时可以不成对使用的原因
内置类型和简单类型为何可以不用配对?当使用简单类型(没有默认析构) 比如如下代码:void test() { int* lis = new int[100]; delete lis;}或者只有简单数据的结构体:struct node { int a; int b; int *c;};void test() { node* lis = ne原创 2017-07-27 21:35:05 · 1469 阅读 · 1 评论 -
C++ 类型转换运算符——const_cast
今天看《E ffective C++》提到了关于类型转换的章节,就来对C++的类型转换进行一定的分析和测试吧。 C++提供了四个转换运算符: const_cast (expression) static_cast (expression) reinterpret_cast (expression) dynamic_cast (expression)它们有原创 2017-07-21 12:02:17 · 964 阅读 · 0 评论 -
【C++】动态内存管理(四)智能指针(std)
智能指针总结 对于编译器来说,智能指针实际上是一个栈对象,并非指针类型,在栈对象生命期即将结束时,智能指针通过析构函数释放有它管理的堆内存。所有智能指针都重载了“operator->”操作符,直接返回对象的引用,用以操作对象。访问智能指针原来的方法则使用“.”操作符。 访问智能指针包含的裸指针则可以用 get() 函数。由于智能指针是一个对象,所以if (my_smart_object)永原创 2017-07-29 15:08:24 · 1136 阅读 · 0 评论 -
C++中const 的用法
//条款03:尽可能使用const //常量指针 char greeting[] = "Hello"; char *p1 = greeting; //既不是常量指针,也不是常量数据 const char *p2 = greeting; //数据不是常量(可更改),但指针所指地址不可更改 char *const p3 = greeting;...原创 2017-03-02 13:30:46 · 364 阅读 · 0 评论 -
《effective c++》条款二:尽量以enum,const,inline替换#define
/* 以下,是对const,enum,inline的一系列测试 -----《effective c++》条款二 : 尽量以const,enum,inline 替代#define 例如: #define PI 3.1415926 这个记号名称PI,也许不会被编译器所看到,也许在原创 2017-02-25 11:29:31 · 603 阅读 · 0 评论 -
【C++】动态内存管理(五)使用STL容器进行大量的动态内存管理
相信我们平时使用C++的时候都会用到STL里面的很多容器,可以发现,对于这些容器里面的数据,当容器的生命周期到达结束的时候,里面的数据就会被很好地释放掉。 但是对于处于堆上和堆栈的不同数据,使用的方法也有所不同。 我们以以下的对象作为被操作者: class Simple { public: string name; private: s原创 2017-07-30 14:39:39 · 1773 阅读 · 3 评论 -
【C++】STL中map的详细使用说明
说明std::map是一个有序关联容器,包含具有唯一键的键值对key-value。键使用比较函数Compare比较来进行排序。 搜索,删除和插入操作具有对数复杂性。****map通常实现为红黑树。 定义于头文件 <map> 特别注意,map中同一个键值只能存在一个实体 map的特点是增加和删除节点对迭代器的影响很小,除了那个被操作的节点,对其他的节点都没有什么影响(只是内部的一些指针指向的原创 2017-08-01 15:12:19 · 1102 阅读 · 0 评论 -
【C++】MFC中的CString和std::string,以及两者之间的相互转换(基于VS201X版本)
最近学了两天MFC,发现还比较有意思,准备过一段时间买一本《深入浅出MFC》,去好好学一下图形界面的框架以及其内部对系统调用的使用。 在使用MFC的时候,虽然界面和其表面逻辑框架都是使用MFC的,但其实大部分的内部逻辑我还是使用C++原生库去写的,比如今天花了两个小时写了两个MFC小程序——输入型多项式计算器(中缀转后缀,支持加减乘除括号的混合运算)、一个简单的汉英词典软件(解决一下自己平常打代码原创 2017-08-09 15:11:25 · 6570 阅读 · 1 评论 -
C++ 模版函数 深入浅出
假设我们是一个实验室的学生,实验室老板喊你写一个排序算法排序一个int数组 当然,以我们的聪明才智,很快的就写好了这个函数:bool cmp(const int& a,const int& b){ //a>=b返回true,a<b返回false return a >= b ;}void Sort(int * begin,int * end, bool(*cmp)(const原创 2017-07-24 20:12:01 · 442 阅读 · 0 评论 -
C++ 模版类 详细讲解
模版类定义直接先说一下模版类的定义:template <模版类型1,模版类型2...>class 类名{ 内容}一个小示例如下: template<class T> class A { private: T data; public: A(T value) :data(value) {}; T GetD原创 2017-07-25 14:55:46 · 887 阅读 · 0 评论 -
【C++】static 的实现原理及其表现
观察以下代码:int testStatic(){ static int count= 10; //这里的赋值实际上从未被执行过,这个count的初始化在程序装载的时候被执行 //它的值被放在了全局变量区 //这个过程发生在main函数被执行之前(和全局变量的初始化类似,在所有程序执行之前已经完成了初始化) return count--;}我们定义了一个sta原创 2017-04-22 11:13:41 · 3021 阅读 · 2 评论 -
STL中的set
1.关于set关于set,必须说明的是,set是一种关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。 在C++ STL中,标准关联容器如:set, multiset, map, multimap,内部采用的是一种非常高效的平衡检索二叉树:红黑原创 2017-03-26 18:24:24 · 738 阅读 · 0 评论 -
【转】C++中引用(&)的用法和应用实例
引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。我在工作中发现,许多人使用它仅仅 是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。故在本篇中我将对引用进行详细讨论,希望对大家更好地理解和使用引用起到抛砖 引玉的作用。 一、引用简介 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的转载 2016-12-06 20:43:04 · 434 阅读 · 0 评论 -
【C++】vector的迭代器使用中出现的程序中断
目的:STL在很久以前就在使用了,当时记得是做一个基于OPENCV图像处理库,主要由C++编写的小游戏,STL用于处理游戏中的角色的死亡和添加、遍历,在那款游戏的设计中,STL并没有涉及到很细致的部分,但在最近进行一个需要大批量地使用STL的时候出现了很多的错误,重新细致地翻阅了c++Primer 之后,现在将错误进行总结并说明为何出错和如何改正。随机访问容器如vector和list,在迭原创 2016-10-25 19:59:21 · 2128 阅读 · 1 评论 -
变长参数函数的实现及原理
变长参数其实是C语言的特殊参数形式 例如printf()函数和scanf()函数等:int printf(const char * format,...);如此声明,printf函数除了第一个函数类型为const char 之外,其后可以追加任意数量、任意类型的参数。如何实现呢?在函数的实现部分,可以使用stdarg.h里的多个宏来访问各个额外的参数:假设lastarg是变长参数函数的最后一个具名原创 2017-04-21 21:36:36 · 970 阅读 · 0 评论 -
接口的设计(让类被正确的使用)——《Effective c++》
要开发一个不容易被误用的类,我们就要首先考虑用你的类的用户可能会犯怎样的错误 //explicit 预防出现隐式转换class String {String ( int n ); //本意是预先分配n个字节给字符串String ( const char* p ); // 用C风格的字符串p作为初始化值...}String s2 ( 10 ); //OK 分配10个字节的空字符串St原创 2017-04-20 11:04:50 · 431 阅读 · 0 评论 -
对引用的一些测试和学习
类的多态class A{public: virtual void test(){ cout << "this is A"<<endl; };};class B :public A{public: void test(){ cout << "this is B"<<endl; }; };void test(){ A a; a.test();// A B原创 2017-04-20 10:58:22 · 600 阅读 · 0 评论 -
【AR技术点】(二)如何快速跟踪特征图像
最近在准备考研,所以博客很久没有更新了,最近怎么说呢,也还行吧,就是很久没有好好的打过代码了。 每天就是背背单词做做高数,好像一下子又回到了学生时代,还挺怀念的。 好了,话不多说,直接讲图像追踪 首先可以看看我的上一篇博客(AR技术点(一)),了解一下AR的基本常识 复杂的我就不多说了,我就浅显地讲一下AR中的图像标定和跟踪方式的优化和设计PS:由于手边没有配置opencv环境,所以这...原创 2018-05-25 11:51:13 · 7786 阅读 · 1 评论