数据结构和常用算法
文章平均质量分 69
FreedomRoad~
专注于app底层/架构/算法/业务工作流程,记录进步的足迹和感悟。
展开
-
递归函数的理解
前言:有很多复杂算法都包含了递归算法,特别是关于树形数据结构遍历的情景,所以正确深入理解递归算法是很有必要的。一、递归函数的基本概念递归函数机制理解:调用函数的静态和动态机制理解:调用函数和被调用函数虽然是同一个静态代码,但是运行时被函数运行的栈空间独立于调用函数的栈空间,调用点不同,函数状态栈地址也不同,所以运行时调用函数和被调用函数在代码副本还是数据副本上都是完全不同的,只有通过返回值和调用点进行联系。递归的调用形式:直接递归调用F1->F1,间接递归F1->F2->F1,很多情况下是直接递归原创 2015-04-28 08:32:11 · 2441 阅读 · 2 评论 -
stl map 插入方式和特别需要注意的区别
map容器的插值方式和特别需要注意的区别:stl map键都是唯一的,如果插入相同的key, mapObj.insert不会覆盖原来的键值,mapObj[]会覆盖键值。需要不唯一的key用multimap。set的insert插入会不会覆盖,没有区别。测试代码:#include #include #include #include #include using原创 2015-08-15 18:54:13 · 6872 阅读 · 0 评论 -
STL algorithm中的swap 函数使用
对自定义类型使用STL algorithm中的swap函数,会调用自定义的类型的拷贝构造函数一次,赋值函数两次;自定义类型中没有定义那么就会使用默认的拷贝构造函数和赋值函数。 如果是容器,那么会遍历容易进行赋值。STL 中swap源码:// TEMPLATE FUNCTION swap (from )template inline void swap(_Ty& _L原创 2015-08-15 17:58:02 · 6020 阅读 · 0 评论 -
STL 迭代器失效和运算符重载容易错误问题
1.一定要小心迭代器失效1) 容器本身是空的,使用迭代器前,需要检验迭代器是否有效。2) 容器本身增删失效,erase返回的是下一个迭代器,容器改变了插入删除了那么原来的迭代器就很容易失效。3)容器存放的数据增删,容器内尽量存放的是结构体,而不是指针,存放指针很容易导致那块内存删掉了而变成存放的是野指针了。2. STL结构体里面包含有 STL容器,那么不能使用memse原创 2015-08-15 19:10:34 · 969 阅读 · 0 评论 -
STL 自定义结构体集合运算
STL容器的集合操作:1.二叉树类型的或者其它序列类型的容器可以将集合运算结果放置到vector中,vector可以resize下大小(string也可以resize)。2.自定义类型的结构体进行集合运算,那么需要重载operator 3.常用的集合操作1)交集 set_intersection2)并集 set_union3) 差集 set_difference差是原创 2015-08-15 19:50:42 · 2316 阅读 · 0 评论 -
STL 各种容器排序和查找算法对运算符的使用及特别注意运算符重载错误
STL排序会调用operator 例子:// 游戏中的日常任务简单例子// 其实只要关系到使用STL进行排序的都要非常小心operator <的重载函数。struct tagDailyTask{ bool m_bFinish;// 是否完成了任务 DWORD m_dwID; // 任务ID tagDailyTask() { m_bFinish = false; m_d原创 2015-05-13 08:19:41 · 2337 阅读 · 0 评论 -
map/unordered_map原理和使用整理
map的内部实现是二叉平衡树(红黑树);hash_map内部是一个hash_table一般是由一个大vector,vector元素节点可挂接链表来解决冲突,来实现.hash_map其插入过程是:得到key通过hash函数得到hash值得到桶号(一般都为hash值对桶数求模)存放key和value在桶内。其取值过程是:得到key通过hash函数得到hash值得原创 2015-04-15 08:47:54 · 63242 阅读 · 9 评论