stl
vivianke
这个作者很懒,什么都没留下…
展开
-
STL list::erase 简单使用
list myList; myList.push_back(1); myList.push_back(2); myList.push_back(3); myList.push_back(4); myList.push_back(5); myList.push_back(6); list::iterator it = myList.begin(); while (it != m原创 2011-12-21 19:46:04 · 338 阅读 · 0 评论 -
《C++标准程序库》读书笔记 2012-07-30 vector缩减容量
《C++标准程序库》p150介绍vector容器的章节提到一种缩减vector容量的方法,在此记录一下#include #include #include templatevoid shrinkCapacity(std::vector& v) { std::vector tmp(v); // copy elements into a new vector v.swap(原创 2012-07-30 10:46:16 · 501 阅读 · 0 评论 -
《C++标准程序库》读书笔记 2012-07-26 map插入元素常用方法
书中在p203页提到,在map中插入元素有三种方法,其实就一种都是构造一个pair。 如下三种方法:std::map col1;col1.insert(std::map::value_type(1, 1));col1.insert(std::pair(1, 1));col1.insert(std::make_pair(1, 1));这种三种调用方式,最终都是调用map父原创 2012-07-26 07:50:39 · 1204 阅读 · 0 评论 -
《C++标准程序库》读书笔记2012-08-11 排序仿函数的设计规则
《C++标准程序库》p175页讲解了排序仿函数的设计规则1,必须是“反对称的”对于operator2,必须是“可传递的”对于operator3,必须是“非自反的”对于operator根据这三个规则,对于以结构体为key的情况,自定义的operator//对于有两个成员的结构体:struct IndexItem{ long time; int原创 2012-08-11 22:59:39 · 2205 阅读 · 0 评论 -
系统自带的字符串hash函数,以及优化建议
ubuntu下的C++的字符串hash函数:inline size_t __stl_hash_string(const char* __s){unsigned long __h = 0; for ( ; *__s; ++__s) __h = 5*__h + *__s;return size_t(__h);}VS 2003.NET的stl自带的hash函数:原创 2012-08-02 01:13:06 · 610 阅读 · 0 评论 -
stl map资源释放
最近项目中频繁用到map容器,以及参考《C++标准程序库》发现对于map容器,若要立即清空map,并归还内存给OS,可以使用如下宏:template inline void map_slim_release(TMap& m) { std::map().swap(m);}即将该map与一个无指针指向的空map互换内存空间。原创 2012-07-26 02:13:27 · 1299 阅读 · 0 评论 -
stl map erase元素
调用erase()移除map中的元素,《C++标准程序库》提供了一个示例,在此记录以下:#include #include #include "print.hpp"int main(){ std::map col1; col1.insert(std::make_pair(1, 1)); col1.insert(std::make_pair(2, 2)); PRINT原创 2012-07-26 00:53:26 · 405 阅读 · 0 评论 -
对map使用find_if()
根据《C++标准程序库》中描述,对于map的find()成员函数,可以用来搜寻拥有某个key的第一个元素,但是不能搜寻持有某特定value的元素。如果搜寻某特定value,需要使用find_if(),或者循环遍历。以下示例如何使用find_if():#include #include #include #include typedef std::map map_t原创 2012-07-25 08:07:42 · 1955 阅读 · 0 评论 -
stl map find(const key_type& _Keyval)源码分析及图示
stl源码片段: iterator find(const key_type& _Keyval) { // find an element in mutable sequence that matches _Keyval iterator _Where = lower_bound(_Keyval); return (_Where == end() || this->comp(_K原创 2012-08-04 06:22:50 · 1060 阅读 · 0 评论 -
stl map insert(const value_type& _Val)源码分析及图示
stl源码片段: _Pairib insert(const value_type& _Val) { // try to insert node with value _Val _Nodeptr _Trynode = _Root(); _Nodeptr _Wherenode = _Myhead; bool _Addleft = true; // add to left of原创 2012-08-04 04:40:30 · 1466 阅读 · 0 评论 -
《C++标准程序库》读书笔记 2012-07-14 推荐前置式递增或者递减
在使用iterator的过程中,推荐前置式递增或者递减。书中是这样描述的,对于前置式递增(preincrement)++pos,比后置式递增(postincrement)pos++效率高。后者需要一个额外的临时对象,因为它必须存放迭代器的原本位置并将其返回,所以一般情况下最好使用++pos,不要用pos--从stl的源码可以对上述建议进行佐证:const_iterato原创 2012-07-14 03:18:03 · 426 阅读 · 0 评论 -
《C++标准程序库》读书笔记 2012-07-13 max辅助函数
书中提到当使用不同的类型调用max函数时,要声明参数类型,如下:inti;long l;l = std::max(i, l) //OK原创 2012-07-13 06:20:07 · 467 阅读 · 0 评论 -
《C++标准程序库》读书笔记 2012-07-12 auto_ptr_ref记录
正常情况下,一个类别的copy构造和赋值是需要使用const T&,因为auto_ptr本身copy构造和赋值的特殊性,只能使用T&,不能使用const T&,否则无法转移ownership,源码如下: auto_ptr(auto_ptr& _Right) _THROW0() : _Myptr(_Right.release()) { // construct by assu原创 2012-07-12 00:32:22 · 391 阅读 · 0 评论 -
《C++标准程序库》读书笔记 2012-07-07 auto_ptr 禁止隐式转换
《C++标准程序库》4.2.1和4.2.2节描述auto_ptr不允许隐式转换,如下所示:#include std::auto_ptr ptr1(new ClassA); //OKstd::auto_ptr ptr2 = new ClassA; //ERRORauto_ptr可以拿来当作另外一个auto_ptr的初值,如上所示普通指针是不行的查看auto_ptr的声原创 2012-07-07 09:22:52 · 326 阅读 · 0 评论 -
《C++标准程序库》读书笔记 2012-07-08 auto_ptr 作为参数传递
《C++标准程序库》中说明auto_ptr当需要作为参数传递时,安全的方式是使用const T&方式分析如下:对于使用by value方式传递,不管使用T或者const T,ownership都会改变对于使用by reference,若仅仅使用T&,虽然传参的时候没有改变ownership,但是在函数内部用户却可以随便改变ownership援引书中的示例:templ原创 2012-07-08 13:44:26 · 566 阅读 · 0 评论 -
使用stl的hash_map
最近项目中要使用stl中的hash_map,开发工具VS 2003.NET。hash_map不是标准的stl容器,但是在VS2003中,仍旧可以这样使用:#include ... std::hash_map col1; for (int i = 0; i < 100000; ++i) { col1.insert(std::make_pair(i, i)); }原创 2012-08-01 01:15:03 · 599 阅读 · 0 评论