- 博客(8)
- 资源 (4)
- 收藏
- 关注
原创 EFF_STL4
1.尽量使用iterator来代替其他iterator。iterator到const_iterator、iterator到reverse_iterator、reverse_iterator到const_reverse_iterator可以进行隐式转换;reverse_iterator可以通过base()转换到iterator,const_reverse_iterator可以通过base()转换到const_iterator,只是这种转换方式不安全。假设 i为iterator,ci为const_iterato
2010-06-29 16:25:00 340
原创 EFF_STL3
1. 注意相等 与 等价的区别。比如:find()函数采用的是相等的意义,即operator ==;set.insert()采用等价的含义,即operator 在需要排序的关联容器中,注意operator 等价的含义是:!(c1&& !(c2此时,c1 c2等价。2.为指针类型的关联容器指定比较操作。因为默认的比较操作采用的是指针比较。可以通过实现一个防函数类来实现。参考条款:203.在关联容器中,比较函数对相等的值,应该返回false;比如set s;如果采取less_equal比较函数,s.ins
2010-06-25 17:01:00 261
原创 EFF_STL2
书籍名:EFF_STL记录要点:1. 对于多线程的处理。 在STL中,多线程可以同时读取一个容器内容,但读取是不能有写操作。 多线程也可以同时写多个容器。 对于平常的多线程处理,需要我们自己去做一些控制。比如锁定操作。 最实用的方法是创建一个lock类。在Lock构造函数中做锁定操作,析构函数中做释放操作。因为C++做过约定,如果发生异常,局部对象会自动销毁,所以lock一定可以自动的释放掉锁定。2. 在使用动态数组时,可以考虑用vector或string来代替。同时,防止多线程造成的st
2010-06-25 14:27:00 368
原创 Eff STL
书籍名:Eff_STL要点:1. 将子类对象放入父类类型的容器中,会出现分割(扩充部分被舍弃);可以采取指针的方式进行处理。2. class A;A[10];会申请10个A对象内存,并默认构造A对象。 vector a;则建立0个A对象 a.reserve(10);创建能容下10个A对象的vector,但没有构造A对象,避免了A拷贝的调用。3. 用empty()代替size()来检查个数是否为0. 原因:前者是常数时间操作,后者对于list是线性操作。 再原因:splice()将一
2010-06-24 15:07:00 383
原创 函数说明
CoTaskMemAlloc/CoTaskMemFree如果需要调用COM接口,并且接口中有[out]的参数,且类型不是整形或浮点数之类的基本数据类型,就需要调用CoTaskMemAlloc来申请这块内存,并使用完毕后调用CoTaskMemFree来释放。LPVOID CoTaskMemAlloc( __in SIZE_T cb);该函数使用默认的分配器来对内存进行分配。没必要在调用该函数之前去调用CoGetMalloc函数。返回的内存块中的初始内容是未定义的。分配了的内存块也许会比cbbytes指定的
2010-06-22 15:56:00 350
原创 SQL常用数据类型介绍
1.字符串char :定长字符串,不够时自动补齐。最大长度8000text:用来存储极其大量的信息,可达2GBvarchar:可变长度的字符串,最大长度8000 2.Unicode 字符串Nchar:最大长度8000/2Nvarchar:Ntext: 3.日期和时间类型datetime:8字节,精度3.33秒smalldatatime:4字节,精度
2009-05-08 14:48:00 720
原创 数据库学习笔记(SQL Server)
1. 数据库还原EXEC sp_attach_db Assert, D:/Program Files/Microsoft SQL Server/MSSQL/Data/Asset_data.mdf, D:/Program Files/Microsoft SQL Server/MSSQL/Data/asset_log.ldf 2.创建存储过程Drop procedure
2009-05-07 15:01:00 327
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人