
c++
文章平均质量分 92
elloop
el
展开
-
【C++ STL应用与实现】22: 函数组合之1:如何使用std::bind (since C++11)
本文总结了std::bind这个模板函数的用法,给出了std::bind绑定普通函数(函数指针)、lambda表达式、成员函数、成员变量、模板函数、嵌套std::bind等的语法细节及注意的问题。原创 2015-12-16 07:31:05 · 16305 阅读 · 3 评论 -
【C++ STL应用与实现】0: 感恩STL——STL, ACM和年轻的我们
本文是一篇洗脑文,鼓吹STL的好处, 回忆作者第一次认识STL,并给出STL的学习路线。原创 2015-12-17 13:50:39 · 10774 阅读 · 0 评论 -
【C++ STL应用与实现】86: 如何使用std::accumulate
本文总结了STL算法中,数值类算法(numeric algorithm)里的第一个算法: std::accumulate的使用, 及注意事项原创 2015-12-18 09:45:37 · 19765 阅读 · 2 评论 -
【C++ STL应用与实现】23: 如何使用std::mem_fn (since C++11)
本文总结了STL中函数适配器:`mem_fn`系列函数的用法,它们是:`mem_fun (c++98)`, `mem_fun_ref (c++98)`, `mem_fn (c++11)`. 文中给出了它们各自的使用范围及代码示例,提到了mem_fn的使用限制,使用bind来解决这个限制。原创 2015-12-21 23:48:34 · 20678 阅读 · 0 评论 -
【C++ STL应用与实现】26: 如何使用std::for_each以及基于范围的for循环 (since C++11)
本文总结了STL算法中for_each, for_each算法很常用,以致于C++11定义了一个新的语法: `range based for loop`, 也就是基于范围的for循环,直接在语法层面把for_each的功能给实现了。本文给出一些使用`for_each`和rang-based for loops的用法,并说明for loops的实现原理和使用注意事项。原创 2015-12-23 00:25:23 · 15129 阅读 · 0 评论 -
【C++ STL应用与实现】5: 如何使用std::array (since C++11)
本文总结了STL中的序列式容器array的用法及注意事项。array的出现代表着C++的代码更进一步“现代化”,就像std::string的出现代替了c风格字符串并且能和STL配合工作一样,array的出现则将取代语言内置的数组以及c风格的数组字符串,它提供了data()接口,使得能够获得内部数组的首地址,它提供了size(), 能够得其固定的长度,使得C++的数组也可以像Java等语言那样知道自己的length;它原创 2015-12-24 00:52:44 · 12551 阅读 · 2 评论 -
【C++ STL应用与实现】64: 如何使用shuffle和random_shuffle : 洗牌 (since C++11)
本文介绍了STL中的变序类算法(mutating algorithm)里面的洗牌算法:std::random_shuffle和std::shuffle.random_shuffle算法在C++11之前就已经存在,C++11之后由于右值引用的引入,它的使用范围变大了。shuffle算法则是从C++11之后才开始出现,可以与随机数和分布库一起使用。与本系列的其他文章一样,本文介绍该最新的使用方法,比如rand原创 2015-12-25 00:23:06 · 19385 阅读 · 0 评论 -
【C++ STL应用与实现】7: 如何使用std::forward_list 单链表 (since C++11)
本文介绍了STL中的序列式容器`std::forward_list`, 从它的名字就能推测出来,它是单向的,只能前进(forward). 确实如此,它其实就是对C语言风格的单链表的封装,仅提供有限的接口,相对于std::list(双向链表,并且定义很多接口)来说它节省了内存,同时又有比list更好的运行时性能;原创 2015-12-25 23:46:01 · 6120 阅读 · 0 评论 -
【C++ STL应用与实现】17: 如何使用迭代器辅助函数
本文介绍了STL中的迭代器辅助函数的用法及注意事项,这些迭代器辅助函数包括:advance, next (since C++11), prev (since C++11), distance, iter_swap.使用这些辅助函数需要包含头文件:#include <iterator>advance, next, prev, distance这四个辅助函数使得所有迭代器都拥有类似随机访问迭代器的特性,比如adv原创 2015-12-26 23:33:23 · 2326 阅读 · 0 评论 -
【C++ STL应用与实现】18: 如何使用迭代器适配器
本文介绍了STL中的迭代器适配器(iterator adapter)的概念及其使用方法示例。迭代器适配器可以和标准库中的算法配合使用,达到一些特殊的效果。迭代器适配器分为以下几类:- reverse iterator : 反向迭代器- insert iterator : 插入型迭代器- stream iterator : 流迭代器- move iterator : 移动型迭代器原创 2015-12-29 01:15:05 · 1717 阅读 · 0 评论 -
【C++ STL应用与实现】16: 迭代器综述
本文介绍了STL中的迭代器的概念和五种类别的迭代器:`Output iterator`, `Input iterator`, `Forward iterator`, `Bidirectional iterator`, `Random-access iterator`.迭代器是为了表示容器中某个元素位置这个概念而产生的,有一般到特殊("高级")可以把它分成五类,如下表所示:原创 2015-12-27 22:53:42 · 1486 阅读 · 0 评论 -
【C++ STL应用与实现】19: 迭代器特性-iterator traits
本文介绍了STL中的迭代器相关的类型和特性,它们用来定义和区分不同的迭代器类型。如iterator tag作为迭代器的“标签”用来区分迭代器的类型;iterator traits定义了所有类型的迭代器都应该有的公共信息。那标准库为什么提供这些东西呢?答案是我们可以根据这些信息来编写泛型代码,在泛型代码里根据iterator traits来判定迭代器的类型以做相应处理、可以自己定义迭代器实现自定义的迭代器操作。原创 2015-12-30 00:42:31 · 2545 阅读 · 1 评论 -
【APUE 学习笔记】0: Unix开发环境搭建
本文介绍了如何为Unix环境下C/C++系统编程搭建开发环境:操作系统: macOS 10.11.5开发工具:Vim 7.4(patches: 1-1952) + YCM( YouCompleteMe ) + Clang++编译构建:CMake 3.0+调试工具:Xcode和GDB/LLDB原创 2016-08-31 20:54:05 · 826 阅读 · 0 评论 -
基于Cocos2d-x的迷宫探索演示程序
本文展示了使用cocos2d-x来实现的一个迷宫探索演示程序,一种简单粗暴的寻路算法,算法来自经典的严蔚敏c语言数据结构里的迷宫探索算法,使用栈来实现。原创 2016-09-30 08:35:50 · 1778 阅读 · 0 评论 -
【C++ STL应用与实现】1: STL概览和分类
本文从整体上对STL的内容和功能做了一个概览,并根据其组成部分功能的不同对STL的组件进行分类。在后续的文章中会对每个分类中的组件进行展开说明。原创 2015-12-15 22:32:14 · 8617 阅读 · 0 评论 -
【C++ STL应用与实现】56: 使用std::unique删除重复元素
核心是应用中的unique函数, 它能删除连续序列的副本(Remove consecutive duplicates in range).原型如下:template ForwardIterator unique ( ForwardIterator first, ForwardIterator last );template ForwardIterator uniqu原创 2012-06-26 22:59:14 · 12563 阅读 · 0 评论 -
【C++ STL应用与实现】目录
这篇文章是《STL应用与实现》系列的目录, 也是这系列文章的写作计划。STL的总结主要分成四大块:容器、迭代器、函数对象和算法。每个大块细分成的每个叶子节点就对应着一篇文章,文章标题在目录里以超链接的形式展现,作为一个索引。已经完成的文章,我会在后面加上【完成】标识。跳转不过去的就是未完成的文章,作为写作计划。原创 2015-12-19 08:07:18 · 16426 阅读 · 3 评论 -
【C++ STL应用与实现】6: 如何使用std::list
list是stl对链表数据结构的一种支持,其通常被实现为双向链表。本文介绍了list的基本用法以及在使用list时需要注意的一些问题。原创 2017-01-31 19:11:14 · 1122 阅读 · 0 评论 -
【C++ STL应用与实现】2: 如何使用std::vector
本文介绍vector容器。vector是STL容器中最为常用的一个,它是序列式容器的代表,是对动态数组的抽象封装。原创 2017-01-29 23:35:04 · 1777 阅读 · 0 评论 -
如何使用vsprintf, vsnprintf等函数
在一些c++的框架中,有很多小的util函数,通常每个框架里都会有一个log函数,用法类似于printf(fmt, ...), 比如cocos2d-x的log函数用法大概像下面这样:log("size is %d, %d", w, h);它们的实现就是借助于vsnprintf族函数。本质在于格式化一个字符串。下面通过一个例子来说明如何使用vsnprintf族函数来实现一个字符串格式化函数原创 2016-12-31 23:01:20 · 5499 阅读 · 0 评论 -
【C++ STL应用与实现】62: 如何使用std::next_permutation
本文介绍STL中的排列算法原创 2016-12-31 22:37:08 · 1071 阅读 · 0 评论 -
【C++ STL应用与实现】72: 标准库里的堆--如何使用标准库的heap算法
本文介绍如何使用STL里的heap(堆)算法。第一次接触heap这种数据结构是在大学的数据结构教材上,它是一棵完全二叉树。在STL中,heap是算法的形式提供给我们使用的。包括下面几个函数:make_heap: 根据指定的迭代器区间以及一个可选的比较函数,来创建一个heappush_heap: 把指定区间的最后一个元素插入到heap中pop_heap: 弹出heap顶元素, 将其放置于区间末尾原创 2016-11-29 23:41:09 · 5159 阅读 · 2 评论 -
【OpenGL Programming On macOS using glfw 】0: Build a Simple OpenGL Program
OpenGL红宝书第九版已经开始使用glfw作为窗口管理和Context创建工具, 取代了第八版里的freeglut和glew。本文讲解如何使用glfw在macOS上来构建一个OpenGL程序(OpenGL 3.0+)包括以下步骤:从github下载glfw源码使用CMake构建glfw,并运行示例,以确保glfw确实可用编写自己的OpenGL代码,并链接glfw来展示结果原创 2016-11-18 09:06:15 · 2005 阅读 · 4 评论 -
rapidjson使用总结
rapidjson是腾讯的开源json解析框架,用c++实现。由于全部代码仅用header file实现,所以很容易集成到项目中。rapidjson的性能是很出色的,其作者[Milo Yipz](https://github.com/miloyip)做了28个C/C++ JSON库的评测,[这个链接](http://www.zhihu.com/question/23654513)里有测试的结果截图。原创 2015-11-18 16:13:35 · 51449 阅读 · 4 评论 -
C++的 copy-and-swap idiom 是什么
c++里的又一个惯用法or最佳实践 copy-and-swap.原创 2016-11-29 23:27:25 · 1061 阅读 · 0 评论 -
C++的The Big Three and A Half 是什么
你可能知道C++里面的这个梗,但是并不知道英文叫这个。。。原创 2016-11-29 23:14:46 · 721 阅读 · 0 评论 -
【APUE 学习笔记】2: Unix文件和目录
本文是APUE第四章:文件和目录知识点的总结和代码实践的总结。原创 2016-09-30 21:10:50 · 592 阅读 · 0 评论 -
【APUE 学习笔记】1: Unix文件IO
本文总结APUE第三章:文件IO的知识点和对代码实践的总结原创 2016-09-30 21:07:21 · 499 阅读 · 0 评论 -
【C++ STL应用与实现】95: 如何使用Allocator
本文展示了如何使用Allocator,例子取自《STL源码剖析》里实现的一个简单的Allocator,从中可以看到Allocator最基本的用法。原创 2016-09-30 20:52:25 · 1641 阅读 · 0 评论 -
【APUE 学习笔记】4: Unix Process Control 进程控制
本文是APUE第8章:进程控制知识点的总结和代码实践的总结。原创 2016-10-11 23:27:24 · 775 阅读 · 0 评论 -
【Programming In Lua (2E) 笔记】2:操作lua栈
本文总结了Lua中操作虚拟栈的API,通过这些API可以做到在Lua和C/C++之间传递数据,相互调用对方。在Programming In Lua那本书中(后文简称PIL),作者把这些API称作“C API”,一方面是因为他们是用C语言实现,另一方面它们的作用是用来实现C/C++语言和Lua之间的相互调用。正如PIL中说的那样,几乎所有的这些API都会操作虚拟栈,这个虚拟栈在C/C++与Lua通信过程中,解决了两者之原创 2016-05-28 23:34:36 · 620 阅读 · 0 评论 -
【cocos2d-x 2.x 学习与应用总结】14: 自定义shader绘制混合颜色的矩形
本文介绍了如何在cocos2d-x中使用自定义shader来实现混合颜色矩形的绘制。文中继续使用[前一篇文章中](http://blog.youkuaiyun.com/elloop/article/details/50551917)定义的CustomDrawNode类来实现绘制过程,在其基础上派生出`ColorfulRectangle`类,使用一对新的shader。绘制的效果图如下所示:原创 2016-01-25 23:12:49 · 1309 阅读 · 0 评论 -
【cocos2d-x 3.x 学习与应用总结】4: 使用cocos compile编译apk
本文总结了使用`cocos compile`命令编译cocos2d-x安卓apk的基本用法,以及记录一个使用NDK-r9d(gcc 4.8)编译C++11的`hash_map`遇到的一个问题: `error: invalid use of incomplete type 'struct std::hash<MessageType>'`原创 2016-01-24 23:27:37 · 8533 阅读 · 7 评论 -
【C++ OpenGL ES 2.0编程笔记】8: 使用VBO和IBO绘制立方体
本文介绍了OpenGL ES 2.0 中的顶点缓冲对象(VBO: Vertex Buffer Object)和索引缓冲对象(IBO: Indice Buffer Object)的用法,在之前的文章中图元的绘制没用使用VBO, 要绘制的顶点数据是以顶点数组的形式保存在客户端的内存中的,在每次调用`glDrawArrays`或者`glDrawElements`的时候,顶点数组都会被从客户端内存copy到显卡内存。原创 2016-01-07 00:54:51 · 4362 阅读 · 0 评论 -
cocos2d-x: 常用组件默认参数
本文总结了cocos2d-x常用渲染类的默认属性和它们之间的继承关系,并对比了2.x和3.x在相关方面之间的一些差别。原创 2015-11-25 07:29:59 · 8046 阅读 · 0 评论 -
【C++ OpenGL ES 2.0编程笔记】5: mipmap
本文介绍了OpenGL ES 2.0 中常用的多级纹理贴图技术,mipmap, 给出了一个使用mipmap的3D场景示例。>在三维计算机图形的贴图渲染中有一个常用的技术被称为Mipmapping。为了加快渲染速度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为 MIP map 或者 mipmap。这个技术在三维游戏中被非常广泛的使用。“MIP”来自于拉丁语 multum i原创 2016-01-05 23:58:08 · 2480 阅读 · 0 评论 -
【cocos2d-x 3.x 学习与应用总结】3: CallFunc系列
CallFunc系列对象是Action的一种,具体来说它是瞬时动作(ActionInstant)的一种,其它的瞬时动作还包括Show, Hide, ToggleVisibility, RemoveSelf, FlipX, FlipY, Place等,这么多的瞬时动作,为什么把CallFunc提取出来呢,它有什么好说的呢?首先是从使用频率上来看的,CallFunc通常和DelayTime一起组成一个Sequence原创 2015-12-30 23:47:11 · 6540 阅读 · 0 评论 -
【cocos2d-x 3.x 学习与应用总结】4: 理解CC_CALLBACK_0, CC_CALLBACK_1, CC_CALLBACK_2, CC_CALLBACK_3
得益于C++11的新特性,cocos 3.x版本在很多地方的代码看起来都优美了许多。这其中就包括一些回调函数的写法,`CC_CALLBACK_N`系列宏的作用是对一个成员函数进行适配并返回一个回调函数。本文介绍一下我对`CC_CALLBACK_N`系列宏的理解。原创 2016-01-01 20:13:53 · 9175 阅读 · 5 评论 -
【cocos2d-x 3D游戏开发】2: 2D基础回顾---理解CCMenu类的实现, 实现点击放大的菜单按钮
本文介绍了CCMenu类的实现原理,并在CCMenu的基础上稍加改造,实现了一个点击自动缩放的菜单类。原创 2015-12-10 23:45:25 · 8233 阅读 · 0 评论 -
【cocos2d-x 3D游戏开发】1: 2D基础回顾---触摸事件(2.x)
前言本文回顾了cocos2d-x中触摸事件的使用方法和注意事项,并给出一个带有点 击缩放功能的自定义菜单类的实现。原创 2015-12-02 07:43:20 · 10122 阅读 · 0 评论