随笔分类 -  STL

map和hash_map的区别
摘要:这里列几个常见问题,应该对你理解和使用hash_map比较有帮助。4.1 hash_map和map的区别在哪里?构造函数:hash_map需要hash函数、等于函数;map只需要比较函数(小于函数).存储结构:hash_map采用hash表存储,map一般采用红黑树(RB Tree)实现。因此其内存数据结构是不一样的。4.2 什么时候需要用hash_map,什么时候需要用map?总体来说,hash_map 查找速度会比map快,而且查找速度基本和数据量大小无关,属于常数级;而map的查找速度是log(n)级。并不一定常数就比log(n) 小,hash还有hash函数的耗时,明白了吧,如果你考虑 阅读全文

posted @ 2012-02-26 20:42 Hibernate4 阅读(355) 评论(0) 推荐(0)

STL容器里存放对象还是指针
摘要:一.问题的引出:容器可以存放对象,可以存放指针,这里要谈的是两者的使用问题。就是什么时候存放对象更好,什么时候存放指针更好?二.问题的分析过程:1.首先说下stl容器的工作方式对于内建类型(int float char等),容器的工作方式是纯粹的位拷贝,这里没有什么需要多说的。对于自定义的对象,容器容纳了对象(比如通过insert或push_back等),但容器中存放的对象不是你给它们的那个对象,因为两个对象在内存中的位置不一样。此外,当你从容器中获取一个对象时,你所得到的对象不是容器里的那个对象。取而代之的是,当你向容器中添加一个对象(比如通过insert或push_back等),进入容器的 阅读全文

posted @ 2012-02-24 16:09 Hibernate4 阅读(517) 评论(0) 推荐(0)

std::find ,set.find, multiset.find, map.find和multimap.find算法总结
摘要:这几天对到底选用哪个容器,用哪种形式的find函数有一些迷惑的地方。工作之后,花些时间对这些常用的东西做一个总结,方便以后翻阅所用。1.通用std::find 函数例子1:// find example #include <iostream> #include <algorithm> #include <vector> usingnamespacestd; intmain () { intmyints[] = { 10, 20, 30 ,40 }; int* p; // pointer to array element: p = find(myints,my 阅读全文

posted @ 2012-02-24 14:46 Hibernate4 阅读(3636) 评论(0) 推荐(3)

STL容器:删除元素,迭代器失效,选择时机
摘要:一. 种类:标准STL序列容器:vector、string、deque和list。标准STL关联容器:set、multiset、map和multimap。非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一个重型字符串非标准关联容器hash_set、hash_multiset、hash_map和hash_multimap。几种标准非STL容器,包括数组、bitset、valarray、stack、queue和priority_queue值得注意的是,数组可以和STL算法配合,因为指针可以当作数组的迭代器使用。二.删除元素如果想删除东西,记住remove算法后,要加上 阅读全文

posted @ 2011-12-26 16:03 Hibernate4 阅读(857) 评论(0) 推荐(1)

返回vector对象与引用的区别
摘要:struct tagItem { int a; int b; } //假如在A类中定义成员: vector<tagItem> m_vecItem; vector<tagItem> A::f() { return m_vecItem;//tagItem需要定义拷贝构造函数,否则m_vecItem即使在别处push_back了,每一个元素的a,b成员不会拷贝过去而保持初值(0之类的值) } vector<tagItem>& A::f() { return m_vecItem; } 因为stl容器都是基于拷贝,故不仅是vector,其它容器返回引用或对象都 阅读全文

posted @ 2011-11-29 21:20 Hibernate4 阅读(958) 评论(0) 推荐(0)

序列式容器Sequence containers
摘要:1:何为序列式容器,C++标准程序库上面是这样说的:此乃可序(ordered)群集,其中每个元素均有固定的位置—取决于插入时机和地点,和元素的值无关。如果以追加方式对一个群集置入六个元素,它们的排列次序将和置入次序一致。STL提供三个定义好的序列式容器:vector,deque,list;vector的相关操作:vector将其元素置于一个dynamic array// vector assign #include <iostream> #include<algorithm> #include <vector> using namespace std; in 阅读全文

posted @ 2011-09-12 21:01 Hibernate4 阅读(189) 评论(0) 推荐(0)

导航