??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲人成网站999久久久综合,久久国产福利免费,国产成人久久精品激情 http://www.shnenglu.com/jianc/category/18732.html<script type="text/javascript">
function OnClient(){
var tmp = 1;
var tmp2 = 2;
var sum = tmp + tmp2;
alert(sum);
}
</script> zh-cn Wed, 03 Feb 2016 10:07:22 GMT Wed, 03 Feb 2016 10:07:22 GMT 60 代码自动补全插g http://www.shnenglu.com/jianc/archive/2016/01/31/212766.htmljianc jianc Sun, 31 Jan 2016 13:21:00 GMT http://www.shnenglu.com/jianc/archive/2016/01/31/212766.html http://www.shnenglu.com/jianc/comments/212766.html http://www.shnenglu.com/jianc/archive/2016/01/31/212766.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/212766.html http://www.shnenglu.com/jianc/services/trackbacks/212766.html Visual Assist http://www.wholetomato.com/
]]>zeromq? http://www.shnenglu.com/jianc/archive/2012/10/11/193170.htmljianc jianc Thu, 11 Oct 2012 07:58:00 GMT http://www.shnenglu.com/jianc/archive/2012/10/11/193170.html http://www.shnenglu.com/jianc/comments/193170.html http://www.shnenglu.com/jianc/archive/2012/10/11/193170.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/193170.html http://www.shnenglu.com/jianc/services/trackbacks/193170.html http://www.zeromq.org/https://github.com/zeromq/libzmq
http://zguide2.zeromq.org/page:all
http://blog.codingnow.com/2011/02/zeromq_message_patterns.html
]]> GDI Plus库用基 http://www.shnenglu.com/jianc/archive/2012/05/17/175197.htmljianc jianc Thu, 17 May 2012 05:19:00 GMT http://www.shnenglu.com/jianc/archive/2012/05/17/175197.html http://www.shnenglu.com/jianc/comments/175197.html http://www.shnenglu.com/jianc/archive/2012/05/17/175197.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/175197.html http://www.shnenglu.com/jianc/services/trackbacks/175197.html 配置好库环境? 下面写出使用GDI Plus的基本步? 1.包含头文?br />#include <gdiplus.h> 2.使用名字I间 using namespace Gdiplus; 3.q接必要的导入库文g #pragma comment(lib, "gdiplus.lib") 4.初始?br />ULONG_PTR m_gdiplusToken;
GdiplusStartupInput m_gdiplusStartupInput;
GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL);
5.使用GDI Plus?br />6.用完库后, 释放操作
GdiplusShutdown(m_gdiplusToken);
]]>MFC点击DialogH体可拖?/title> http://www.shnenglu.com/jianc/archive/2012/05/11/174547.htmljianc jianc Fri, 11 May 2012 02:59:00 GMT http://www.shnenglu.com/jianc/archive/2012/05/11/174547.html http://www.shnenglu.com/jianc/comments/174547.html http://www.shnenglu.com/jianc/archive/2012/05/11/174547.html#Feedback 1 http://www.shnenglu.com/jianc/comments/commentRss/174547.html http://www.shnenglu.com/jianc/services/trackbacks/174547.html MFC创徏一个可通过鼠标点击客户区拖动窗口位|的Ҏ 通过d消息响应函数 afx_msg UINT OnNcHitTest(CPoint point); d?br />ON_WM_NCHITTEST() 然后, 定义OnNcHitTest的行为即? OnNcHitTest的代码如?UINT CTimerDlg::OnNcHitTest(CPoint point) { CRect rect; GetClientRect(rect); ClientToScreen(rect); if (rect.PtInRect(point)) return HTCAPTION; return CDialog::OnNcHitTest(point); }
首先, 发生WM_NCHITTEST消息的时? E序先取得客户区的窗口矩? q里用到GetClientRectҎ得到, ׃GetClientRect取得的是相对于窗口坐标系l? 但OnNcHitTest的参数point却是相对于屏q的坐标pȝ, 所以这里用CClientToScreen把取到的客户区矩形{成相对于屏幕的坐? 然后用CRectcȝPtInRectҎ判断point是否落在q个矩Ş里面, 如果? 则返回HTCAPTION(q当于q次点击是点L题栏), 所? 可以这h拖动H口? 如果, OnNcHitTest直接q回HTCAPTION的话, 那么, 但用L击非客户区的时? 有些功能会失? 比如点击pȝ的关闭按? 试一下就会发现这个按钮无效了; ok, 如果点击的是非客L, 者直接返回CDialog::OnNcHitTest(point), q就是按默认处理? 以上的这个方法比较麻? 其实可以更简单一? 只要先调用父cȝOnNcHitTest(point), 取得q回? 在判断是不是HTCLIENT, 如果? 则返回HTCAPTION, 否则直接q回父类OnNcHitTest(point)的返回值就ok? 修改后如?UINT CTimerDlg::OnNcHitTest(CPoint point) { UINT uRet = CDialog::OnNcHitTest(point); if (HTCLIENT == uRet) return HTCAPTION; return uRet; }
再简化一? 成q样?UINT CTimerDlg::OnNcHitTest(CPoint point) { UINT uRet = CDialog::OnNcHitTest(point); return (HTCLIENT == uRet) ? HTCAPTION : uRet; }
]]> 可等待计时器内核对象 http://www.shnenglu.com/jianc/archive/2012/05/10/174491.htmljianc jianc Thu, 10 May 2012 12:38:00 GMT http://www.shnenglu.com/jianc/archive/2012/05/10/174491.html http://www.shnenglu.com/jianc/comments/174491.html http://www.shnenglu.com/jianc/archive/2012/05/10/174491.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/174491.html http://www.shnenglu.com/jianc/services/trackbacks/174491.html 之前学习win32 platform sdk~程的时? 有学C个计时器的东? 那个挺简单的, 是调用SetTimer创徏一个基于某个窗口回调的计时? 既间隔时间ɽH口收到WM_TIMER消息, 或间隔时? 调用我们自己定义的一个回调函? 创徏可等待计时器内核对象, 可以实现cM功能, 现在, 下边l出如何使用可等待计时器内核对象1.CreateWatchDogTimer
HANDLE CreateWatchDogTimer( LPCWSTR pszWatchDogName, DWORD dwPeriod, DWORD dwWait, DWORD dwDfltAction, DWORD dwParam, DWORD dwFlags );
2.SetWaitableTimerBOOL WINAPI SetWaitableTimer( __in HANDLE hTimer, __in const LARGE_INTEGER * pDueTime, __in LONG lPeriod, __in_opt PTIMERAPCROUTINE pfnCompletionRoutine, __in_opt LPVOID lpArgToCompletionRoutine, __in BOOL fResume );
CreateWatchDogTimer函数是创徏一个可{待事g内核对象 SetWaitableTimer函数是讄内核对象的触发时间和旉间隔 废话不多说了, q里直接上代?br />void CDialogDemoDlg::OnBtnCreateTimer() { SYSTEMTIME st; st.wYear = 2012 ; st.wDay = 10 ; st.wDayOfWeek = 0 ; st.wHour = 20 ; st.wMilliseconds = 0 ; st.wMinute = 16 ; st.wMonth = 5 ; st.wSecond = 0 ; FILETIME localft; FILETIME utc; SystemTimeToFileTime( & st, & localft); LocalFileTimeToFileTime( & localft, & utc); LARGE_INTEGER liUTC; liUTC.LowPart = utc.dwLowDateTime; liUTC.HighPart = utc.dwHighDateTime; m_Timer = CreateWaitableTimer(NULL, FALSE, NULL); SetWaitableTimer(m_Timer, & liUTC, 10 * 1000 , NULL, NULL, FALSE); } void CDialogDemoDlg::ThreadProc2(CDialogDemoDlg * pDlg) { while ( 1 ) { DWORD ret = WaitForSingleObject(pDlg -> m_Timer, INFINITE); if (WAIT_OBJECT_0 == ret) { AfxMessageBox( " 可等待事件内核对象触? " ); } } }
ThreadProc2是一个线E? 当时间一? WaitForSingleObject׃q回, 因ؓq里创徏的是一个自动复位内核对? 说以WaitForSingleObjectq回是会自动把内核对象复? q里为演C? 写了个死循环, 所? 下一ơ调用WaitForSingleObject? 如果旉未到, U程ȝ会被挂v. 具体用法l节, MSDN 参? windows核心~程 ]]> MFC非模态对话框销?/title> http://www.shnenglu.com/jianc/archive/2012/05/07/173914.htmljianc jianc Mon, 07 May 2012 09:00:00 GMT http://www.shnenglu.com/jianc/archive/2012/05/07/173914.html http://www.shnenglu.com/jianc/comments/173914.html http://www.shnenglu.com/jianc/archive/2012/05/07/173914.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/173914.html http://www.shnenglu.com/jianc/services/trackbacks/173914.html 非模态对话框需要重载OnCanelҎ, q调用DestroyWindow, 且不能调用基cȝOnCanel 重蝲PostNcDestroy, 需要delete掉this指针// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CDlgTest)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual void PostNcDestroy(); //}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CDlgTest)
virtual void OnOK(); virtual void OnCancel(); //}}AFX_MSG
void CDlgTest::OnOK() { // TODO: Add extra validation here } void CDlgTest::OnCancel() { DestroyWindow(); } void CDlgTest::PostNcDestroy() { // TODO: Add your specialized code here and/or call the base class CDialog::PostNcDestroy(); delete this; }
]]> 用ATL写COME序 http://www.shnenglu.com/jianc/archive/2012/04/29/173106.htmljianc jianc Sat, 28 Apr 2012 18:20:00 GMT http://www.shnenglu.com/jianc/archive/2012/04/29/173106.html http://www.shnenglu.com/jianc/comments/173106.html http://www.shnenglu.com/jianc/archive/2012/04/29/173106.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/173106.html http://www.shnenglu.com/jianc/services/trackbacks/173106.html 今天没事, 看了下ATL(Active Template Library), 跟着|上的入门学习资料自q猫画? l果一下子ok? ~译? 在创Z个test工程去调用这个组件的接口函数, 一切顺? ps:以后用ATL写COMlg, 爽歪?br />ps:有空把COM技术内q看?br /> ]]> Dll中开启共享数据段 http://www.shnenglu.com/jianc/archive/2012/04/24/172630.htmljianc jianc Tue, 24 Apr 2012 09:35:00 GMT http://www.shnenglu.com/jianc/archive/2012/04/24/172630.html http://www.shnenglu.com/jianc/comments/172630.html http://www.shnenglu.com/jianc/archive/2012/04/24/172630.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/172630.html http://www.shnenglu.com/jianc/services/trackbacks/172630.html
#pragma data_seg( " .DataSegName " )
int ifoo;
char cfoo[ 1024 ] = { " test " };
//...
#pragma data_seg()
然后, dll工程里创Z个def文g, def文g写上:
SECTIONS:
.DataSegName READ WRITE SHARE
.DataSegName是节表的名? q里的PE文g中创Z个新节表, 然后def文g指明q个节表为共享节? ? q程在加载这个dll文g的时? 对这个节表进行直接映? 而不是映一份拷贝副?br />
q样, ~译好工E后, 但这个dll文g被加载进q程时? 不通进E就可以通过q个׃n数据节表q行通讯?br />
ps:之前用指?br />
#pragma comment(linker, "/section:.DataSegName, RWS")
而不用defx, 但这样却是不能对.DataSegName节进行数据共? 不是很明?br />
q不是对编译的时? llink.exeE序传递一个参数而已?
link /dll /sections:.DataSegName ...... ]]> C++Primer MW记19 多承和虚拟l承 http://www.shnenglu.com/jianc/archive/2012/03/30/169532.htmljianc jianc Fri, 30 Mar 2012 07:49:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/30/169532.html http://www.shnenglu.com/jianc/comments/169532.html http://www.shnenglu.com/jianc/archive/2012/03/30/169532.html#Feedback 5 http://www.shnenglu.com/jianc/comments/commentRss/169532.html http://www.shnenglu.com/jianc/services/trackbacks/169532.html 1.虚拟l承 --l承了多个基cd? 但只需要一份单独的׃n实例 2.对于一个类的基cȝ数目, c++没有限制(可以多? 两个基类是最常见? 一个基cd常用于表CZ个共有抽象接? W二个基cL供是有的实现 从第三个或更多个直接基类l承而来的派生类遵@mixin-based设计风格 3.基类构造函数被调用的顺序以z表中声明的顺序ؓ?/span>4.在多l承? zcd以从两个或者更多个基类中承同名的成员 --直接讉K是二义的, 导致编译时刻错? 所以要昄指明调用哪个基类的哪个成?Base::member 5.publicz被称为类型?type inheritance) --zcL基类的子cd 提供了较一般的基类的一U特?/span>6.privatez被称为实现?implementation hinheritance) --zcM直接支持基类的公有接? 提供了自q公有接口, 重用基类的实?/span> private基类放映了一U?qZ子类型关p?的承Ş? 基类的整个公有接口在zcM变成private 7.对于is-a子类型关pL? publicl承是一个很有利的机?/span>8.has-a关系一般由l合(composition)而不是承来支持 --使一个类UCؓ另一个类的成?/span> a:如果我们希望改写一个类的虚拟函? 则必M用私有承而不是用组?/span> b:如果我们希望一个类能够引用"一个包含多U可能类型的层次l构"中的一个类, 那么必通过引用使用l合 c:如果只是希望单的重用实现, 则按值组合比l承更好 d:如果希望对象的迟~型分配, 按引?使用一个指?l合通常是一个不想的设计选择 9.免除(exempting)个别成员的私有承媄?/span> 以私有方式? 基类的所有protected和public成员全被l承为子cȝU有成员 c设计者可以针对基cȝ个别成员, 是其免除非公有派生的影响: class CSub: private CBase { public: using CBase::Member; }; 免除个别成员的另一个原因是允许后箋的派生类讉KU有基类的protected成员 zcd能将l承得到的成员恢复到原来的访问? 该访问别不能比基类中原来指定的U别更严格或更不严格 10.protectedl承 --基类的所有公有成员都成ؓzcȝprotected成员 11.对象l合有两UŞ?/span> a:按值组?Composition by value) b:按引用组?Composttion by reference) 12.虚拟l承(virtual inheritance) --在虚拟承下, 只有一个共享的基类子对象被l承, 而无基类在派生层ơ中出现多少?/span> ׃n的基cd对象被称拟基c?vitual base class) 在虚拟承下, 基类子对象的复制及由此引L二义性都被取消了 13.虚拟l承的语? CSub: public virtual CBase1, public virtual CBase2 {...}; virtual ?public的顺序不重要
]]> C++Primer MW记18 cȝ承和子类?/title> http://www.shnenglu.com/jianc/archive/2012/03/30/169501.htmljianc jianc Fri, 30 Mar 2012 03:59:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/30/169501.html http://www.shnenglu.com/jianc/comments/169501.html http://www.shnenglu.com/jianc/archive/2012/03/30/169501.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/169501.html http://www.shnenglu.com/jianc/services/trackbacks/169501.html 1.l承(inheritance) 2.c++通过cL?class derivation)的机制来支持l承 3.基类(base class) 4.zc?derived class) 5.基类和派生类实例的集合称为类l承层次l构(hierarchy) 6.如果基类和派生类׃n相同的共有接? 则派生类被称做基cȝ子类?subtype) 7.基类指针或引用可以直接引用其Mz的类, 多?polymorphism) 8.在运行时刻需要解析出被调用的函数, q个解析q程被称为动态绑?dynamic bindng) --~省情况? 函数实在~译时刻被静态解析的 9.c++? 通过一U被UCؓ虚拟函数(virtual function)的机制来支持动态绑? 通过集成和动态绑? 子类型多态性ؓ面向对象的程序设计提供了基础 10.面向对象的程序设计提供了一U方? 把类型解析的负担从程序员的n上{Ud~译器上 11.cȝ承层ơ结构的主要好处? 我盟可以针对抽象基类的共有接口进E编E? 而不是针对组成承层ơ的个别cd 用户代码可以不受语言变化的媄?--多态和动态绑?/span>12.在c++? 多态性只存在于子cȝ承层ơ中 --void*型的指针可以被描qCؓ多? 但是语言本nq没有显C的支持他们, 必须q序员自己来管?/span> c++语言通过几种方式支持多态?/span> 通过一个隐式{? ?zcL针或引用"转到"其共有基cȝ型的指针或引? 通过虚拟函数的机?/span> 通过dynamic_cast和typeid操作W?/span> if(SubClass* pSub = dynamic_cast<SubClass*>(pObj)) ... 13.抽象基类(abstract base class) 14.实体基类(concrete base class) 15.U虚拟函?pure virtual function) 16.覆盖(override) 17.c++语言为我们提供了一U语法结? 通过它可以指? 一个虚拟函数只是提供了一个可以被子类改写的接?/span>18.传递给~省函数的g是在q行时刻军_, 而是在编译时L据被调用函数的对象的cd军_ 19.虚拟析构函数 --主要是ؓ了能够用delete销毁基cȝ时候也能够保证调用zcȝ析构函数, 要不然它只是调用基类的析构函数而已
]]> C++Primer MW记17 cL?/title> http://www.shnenglu.com/jianc/archive/2012/03/29/169443.htmljianc jianc Thu, 29 Mar 2012 09:20:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/29/169443.html http://www.shnenglu.com/jianc/comments/169443.html http://www.shnenglu.com/jianc/archive/2012/03/29/169443.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/169443.html http://www.shnenglu.com/jianc/services/trackbacks/169443.html 1.队列(queue) --专门用于对象集合的数据结? 对象被加入到队列的尾? 而从队列的顶部被删除(first in first out FIFO) 2.位单个类型提供手工生成的拯是一个无休止的过E? 也是一个无限复杂的l护q程 3.模板参数?template parameter list) --template<xxx> xxx是模板参数?/span>4.模板的类型参?type parameter)由关键字class或关键字typename及其后的表示W构?/span>5.每个模板参数前面都必L关键字class或typename 6.模板非类型参?nontype parameter)׃个普通参数声明构? 一个非cd参数只是该参C表了一个潜在的? 而这个值又代表cL板定义中的一个参? template<class Type, int size = 1024> class Buffer; //如果模板实例的名字没有指定Buffer的大? 则实例化Buffer的大是1024 7.cd转换的过E被UCؓ模板实例?template instantiation) 从通用的类模板定义中生成类的过E?/span>8.模板参数的缺省?/span> template<class Type = string, int size> class Buffer; 9.cL板成原函数可以再cL板的定义中定? 该成员函数是inline成员函数; 也可以定义在cL板定义之?/span>10.c++的模板编译模?template compilation model) ]]> C++Primer MW记16 重蝲操作W和用户定义转换 http://www.shnenglu.com/jianc/archive/2012/03/21/168495.htmljianc jianc Wed, 21 Mar 2012 06:15:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/21/168495.html http://www.shnenglu.com/jianc/comments/168495.html http://www.shnenglu.com/jianc/archive/2012/03/21/168495.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/168495.html http://www.shnenglu.com/jianc/services/trackbacks/168495.html 1.做操作数是该cȝ对象? 才会考虑使用cL员重载操作符 2.c++要求, 赋?=), 下标([]), 调用(()), 和成员访问箭?->)操作W必被定义E类成员操作W? M把这些操作符定义为名字空间成员的定义都会?/span>
标记为编译时刻错?/span>3.c++预定义可重蝲的操作符: + - * / % ^ & | ~ ! , = < > <= >= ++ -- << >> == != && || += -= /= %= ^= &= |= *= <<= >>= [] () -> ->* new new[] delete delete[] 4.对于内置cd的操作符, 它的预定义意义不能被改变 5.预定义的操作W优先不能被改?/span>6.除了operator()? 对其他重载操作符提供~省实参都是非法?/span>
]]>C++Primer MW记15 cȝ初始化赋值和析构 http://www.shnenglu.com/jianc/archive/2012/03/21/168484.htmljianc jianc Wed, 21 Mar 2012 05:04:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/21/168484.html http://www.shnenglu.com/jianc/comments/168484.html http://www.shnenglu.com/jianc/archive/2012/03/21/168484.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/168484.html http://www.shnenglu.com/jianc/services/trackbacks/168484.html
1.~省情况? 用一个类的对象初始化另一个对? 或者向该类另一个对象赋? 都由~省的按成员语义(default memberwise semantics)支持
在某些情况下, 对类的安全性和处理正确性是不够? 需要类设计者提供特D的拯构造函?copy constructor)和拷贝赋值操作符(copy assignment
operator)的定?/span>
2.newcd?--只有new表达式成功的甌到空间内? 构造函数才会被调用
3.构造函数定义ؓinline? 创徏对象是会在调用点展开构造函?/span>
4.成员初始化列?member initialization list)
5.构造函C能用const或volatile关键字来声明
一个constcd象在"从其构造函数完成到析构函数开?q段旉内才被认为是const, volatilecd象也一?/span>
6.explicit修饰W通知~译器不要提供隐式{?/span>
void print(const CTest &test);
//...
print("oops"); //q种调用会把"oops"转换成一个CTest对象
~省情况? 单参数构造函?或者有多个参数, 除了W一个参数外, 其他都有~省实参)被用作{换符
无意的隐式类转换, 是很难跟t的错误!, 关键字explicit被引入到标准c++? 以帮助我们抑制这U不受欢q的~译辅助行ؓ
explicit只能被应用在构造函C
7.~省构造函数是不需要用h定实参就能够被调用的构造函? --q不意味着它不能接受实? 只意味着构造函数的每个参数都有一个缺省g之关?/span>
8.限制对象创徏 --把相x造函数放到非公有讉K区内, 从而限制或昄止某些形式的对创徏动作
在实际的c++E序? 非公有的构造函C要用处是:
防止用一个类对象惌cd一个对象做拯
指出只有当一个类在承层ơ中被用作基c? 而不能直接被应用E序操纵? 构造函数才能被调用
9.拯构造函?--用一个类对象初始化该cȝ另一个对象被UCؓ~省按成员初始化(default memberwise initialization)
一个类对象惌cȝ另一个对象作拯是通过依次拯每个非静态数据成员来实现
c设计者可以通过提供Ҏ的拷贝构造函?copy constructor)来改变缺省的行ؓ
拯构造函C一定是const, 但它却必L引用
10.无论何时, 当在一个函数内删除一个独立的堆对象时, 最好用auto_ptrcd象而不是一个实际的指针
如果delete表达式失? 如一个异常被抛出, 会到时内存泄?异常抛出, 跌了delete操作?), 不会调用析构函数
所以徏议用auto_ptr指针
11.对于在堆中分配的cd象数l的元素, 我们没有办法提供一l显C的值来做初始化, 如果l化支持通过new表达式分配数l? 则类必须提供一个缺省的?/span>
造函? 或不提供构造函?/span>
12.用一个类对象初始化另一个类对象, UCؓ按成员初始化(default memberwise initialization)
发生?用一个类对象昄的初始化另一个对?/span>
把一个类对象作ؓ实参传递给一个函?/span>
把一个类对象作ؓ一个函数的q回g递回?/span>
非空序容器cd的定?/span>
把一个类对象插入C个容器类型中
13.成员cd象初始化
14.~省按成员赋?default memberwise assignment) --用一个类对象向该cȝ另一个对象的赋值操?/span>
用隐式的拯赋值操作符
一般来所, 如果~省的按成员初始化对于一个类不合? 则缺省的按成员赋g不合?/span>
通过提供一个现实的拯赋值操作符的实? 可以改变~省的按成员赋?/span>
注意要防止一个类对象向自p?--对于"先释放与该对象当前相关的资源, 以便分配与被拯对象相关资源"q样的拷贝赋值操作符, 拯自n其?/span>
合?/span>
当一个类对象被赋值给该类的另一个对象是:
a查该c? 判断是否提供了一个现实的拯赋值操作符
b如果? 查访问权? 判断是否可以被调?/span>
c如果不能被调? ~译错误, 否则执行q个调用
d如果该类没有提供昄的拷贝赋值操作符, 则执行按~省成员赋?/span>
e在缺省按成员赋g, 每个内置cd或复合类型的数据成员被赋值给相应的成?/span>
f对于每个cL员对? 递归执行a到f? 知道所有内|或复合cd的数据成员都被赋?/span>
如果希望完全止按成员拷贝的行文, 操作符声明为privateq且不提供实际定义即?/span>
一般来? 应该拷贝构造函数和拯赋值操作视Z个个体单?/span>
15.C++语言不能有效地返回一个类对象, q被视ؓc++语言的一个重大缺?/span>
16.c++cd象的初始化L比赋值更有效
]]> MFC多线E?/title> http://www.shnenglu.com/jianc/archive/2012/03/20/168426.htmljianc jianc Tue, 20 Mar 2012 12:02:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/20/168426.html http://www.shnenglu.com/jianc/comments/168426.html http://www.shnenglu.com/jianc/archive/2012/03/20/168426.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/168426.html http://www.shnenglu.com/jianc/services/trackbacks/168426.html mfc下多U程~程
1.mfc支持两种U程
用户界面U程
工作U程
2.mfc中所有线E都是由CWinThread对象表示
CWinThread是用h口线E的基类, CWinApp是从CWinThreadz出来?/span>
在写用户接口U程? 也要从CWinThreadcL生出自己的线E类
可以调用AfxBeginThread函数, 会创建CWinThread对象
3.~写是想工作U程的控制函? 控制函数的原?
UINT ControlFunctionName(LPVOID pParam); //U程回调
4.U程调用AfxBeginThread函数可以创建新的线E?/span>
5.创徏q启动工作线E?
CWinThread* AfxBeginThread(
AFX_THREADPROC pfnThreadProc,
LPVOID pParam,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
WORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);
6.AfxEndThreadl止U程
7.创徏用户界面U程
从CWinThreadcL生出自己的线E类
攚w这个类
启动用户界面
8.基类的一些成员函?
ExitInstance, 当线E退出是, 会调用执行清理工?/span>
InitInstance, 执行U程cd例初始化, 子类必须重写
OnIdle, 执行U程特定I闲旉处理
PreTranslateMessage, qo消息
Run, 执行U程函数
9.AfxBeginThread函数的另一个重载原?(界面U程)
CWinThread* AfxBeginThread(
CRuntimeClass* pThreadClass, //用RUNTIME_CLASS宏将U程cL针{换ؓ指向CRuntimeClass对象指针
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0;
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);
10.l止U程
正常l止U程 VOID PostQuitMessage(int nExitCode);
提前l止U程 在线E内调用AfxEndThread函数 VOID AfxEndThread(UINT nExitCode);
11.U程同步技?/span>
信号?--限制使用׃n资源的线E数?/span>
CSemaphore g_Sem(5, 5); 旉内最多只?个线E能׃n资源, q初始开始时没有U程获得信号资源
一旦线E访问共享资? 信号量计数器减1, 若变?, 则下来对资源的访问就会被拒绝, 知道持有的资源线E释放了资源的持有权
互斥对象 --内核对象
临界?--用户模式对象 弄不好就Ҏ出现死锁, 不过用v来很? 只有4个API
InitializeCriticalSection, EterCreiticalSection, LeveCriticalSection, DeleteCriticalSection
事g对象 --内核对象 分收工重|对象和自动重置对象
]]> C++Primer MW记14 c?/title> http://www.shnenglu.com/jianc/archive/2012/03/13/167774.htmljianc jianc Tue, 13 Mar 2012 06:20:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/13/167774.html http://www.shnenglu.com/jianc/comments/167774.html http://www.shnenglu.com/jianc/archive/2012/03/13/167774.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/167774.html http://www.shnenglu.com/jianc/services/trackbacks/167774.html 1.c++c?--用户定义的类?user-defined type, UDT)
2.信息隐藏(information hiding)
3.除了静态数据成员外, 数据成员不能在类中被昄地初始化
4.一个成员函数只能重载自q的其他成员函?/span>
5.数据隐藏的优?
如果数据的访问属性是U有? 则一般除了类的共有接? 不能直接讉KU有成员
如果数据的访问属性是共有? 则Q何地斚w可以直接讉Kq个数据成员
但是, 如果cȝ实现变动? 即那个成员改变了, 那么, 如果q个成员是私有的, 但共有接口没改变, 则不需要修改用这个类的代?/span>
如果q个成员是共有的, 那么, 直接讉Kq个成员的Q何代码都需要做相应的改变了
--所? 数据装性自有它的优?/span>
6.讉K限定W?access specifier) public, private, protected
7.在某些情况下, 允许某个函数而不是整个程序可以访问类的私有成? q样做会比较方便, 友元(friend)机制允许一个类授权其他的函数访问他的非公有
成员
8.友元声明以关键字friend开? 只能出现在类的声明中
9.因ؓ只有当一个类的类体已l完整时, 它才被视为已l被定义, 所以一个类不能有自w类型的数据成员, 但可以用指向自ncd的指针或引用作ؓ数据?/span>
?/span>
10.cȝ定义不会引v存储区分? 只有当定义一个类的对象时, pȝ才会分配存储?/span>
11.每个cL员函数的拯只有一?/span>
12.把一个成员函数声明ؓconst可以保证q个成员函数不修改类的数据成? 但是, 如果该类含有指针, 那么在const成员函数中就能修Ҏ针所指的对象,
~译器不会检ؓ错误, q常oc++初学者吃?/span>
13.Z允许修改一个类的数据成? 即它是一个const对象的数据成? 我们也可以把Ҏ据成员声明ؓmutable(易变?. mutable数据成员永远不会?/span>
const成员, mutable成员中可以被更新
14.每个cL员函数都含有一个指向被调用对象的指? q个指针被称为this:
在非const成员函数? 它的cd是指向该cȝ型的指针
在const成员函数? 是指向constcȝ型的指针
在volatile成员函数? 是指向volatilecȝ型的指针
15.cȝ静态成员被当做该类cd的全局对象, 对于非静态成? 每个cd象都有自q拯, 而静态数据成员对每个cȝ型只有一个拷? 静态数据成员只
有一? 该类cdҎ有对象共享访?/span>
16.同全局对象相比, 使用静态数据成员有两个优势:
静态数据成员没有进入程序的全局名字I间
可以实现信息隐藏, 静态成员可以是private成员, 而全局对象不能
17.静态数据成员的cd可以是其他所属类, 而非static数据成员只能被声明ؓ该类的对象的指针或引?/span>
18.静态数据成员可以被作ؓcL员函数的~省实参, 而非static成员不能
19.静态成员函数的声明除了在类体中的函数声明加上关键字static, 以及不能声明为const或volatile之外, 与非静态成员函数相? 出现在类体外的函?/span>
定义不能指定关键字static
20.静态成员没有this指针
21.cL员的指针必须L通过特定的对象或指向该类cd的对象的指针来访?/span>
针对cd象和引用?*
针对指向cd象的指针?>*
22.定义一个成员函数指针需要制定函数返回类? 参数表和c?
int (CTest::*)();
int (CTest::*pmf)() = &CTest::test;
pmf = &CTest::test2;
23.静态类成员属于该类的全局对象和函?/span>
24.联合:一U节省空间的c?/span>
使用union是危险的, 通过一个不适当的数据成员以为的获取到当前存储在union中的值]
25.c++标准库提供了一个bitsetcL? 它可以辅助操作位的集? 在可能的情况? 应尽可能使用它来取代位域
26.一个类可以在另一个类中定? q样的类被称为嵌套类(nested class)
嵌套cL其外围类的一个成?/span>
27.cM可以定义在函C? q样的类被称为局部类(local class)
局部类的成员函数必被定义在类定义? q就把局部类的成员函数的复杂性限制在几行代码?/span>
]]> C++Primer MW记13 泛型法 http://www.shnenglu.com/jianc/archive/2012/03/13/167758.htmljianc jianc Tue, 13 Mar 2012 01:45:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/13/167758.html http://www.shnenglu.com/jianc/comments/167758.html http://www.shnenglu.com/jianc/archive/2012/03/13/167758.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/167758.html http://www.shnenglu.com/jianc/services/trackbacks/167758.html 1.copy() 法把一堆iterator当做前两个实? 用它们标记出要拷贝的元素范围, W三个实参是一个iterator, 它标C被拷贝元素将要放|的起始位置, back_inserter被称为iterator适配? 它得元素被插入C为实参的vector的尾?/span>
2.unique()随然L了容器中的重复? 但是只去掉相ȝ重复? 因此可以先对容器q行sort()排序
]]> C++Primer MW记12 异常处理 http://www.shnenglu.com/jianc/archive/2012/03/12/167709.htmljianc jianc Mon, 12 Mar 2012 03:55:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/12/167709.html http://www.shnenglu.com/jianc/comments/167709.html http://www.shnenglu.com/jianc/archive/2012/03/12/167709.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/167709.html http://www.shnenglu.com/jianc/services/trackbacks/167709.html 1.c++的异常处理机制被UCؓ不可恢复?nonresumptive) 2.栈展开(stack unwinding) 如果扑ֈ一个catch子句, 则该异常被处? 如果没有扑ֈcatch子句, 则在主调函数l箋查找 q个q程沿着潜逃函数调用链向上l箋, 直到扑ֈ该异常的catch子句. 3.重新抛出(rethow) throw; //rethrow语句只能出现在catch子句飞复合语句中 被抛出的异常是原来的异常对?br />4.把catch子句中的异常对象声明为引? 免去了对象的内存拯, 又可以确保应用在catch子句中的异常对象上的修改操作, 能够反映到被重新抛出的异?/p>
对象?br />5.catch-all try { .... } catch(...) {} //catch-all格式 6.catch子句被检查的序与它们在try块之后出现的序相同, 一旦找C一个匹? 则后l的catch子句不再检?br />7.异常规范(exception specification) void foo() throw(Object); //q种声明是异常规范 异常声明是函数接口的一部分 8.异常规范不允讔R被抛出的异常cd到异常规范制定的cd之间的{? void foo() throw(string) { .... throw "exception"; //不允总const char* 到string的{? 此时调用unexpected() throw string("exception"); //可以 }
]]> C++Primer MW记11 函数模板 http://www.shnenglu.com/jianc/archive/2012/03/12/167706.htmljianc jianc Mon, 12 Mar 2012 02:55:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/12/167706.html http://www.shnenglu.com/jianc/comments/167706.html http://www.shnenglu.com/jianc/archive/2012/03/12/167706.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/167706.html http://www.shnenglu.com/jianc/services/trackbacks/167706.html 1.关键字templateL攑֜模板的定义与声明的最前面, 后面是用逗号分隔的模板参数列?template parameter list), 参数表不能ؓI?/span>
2.模板非类型参数是׃个普通的参数声明构成, 代表一个潜在的?
template <typename Type, int size>
Type min(Type (&arr)[size]);
//当函数模板min()被实例化? size的g被一个编译时d知的帔Rg?/span>
3.cd和值的替换q程被称为模板的实例?template instantiation)
4.c++支持两种模板~译模式:
包含模式(Inclusion Model)
分离模式(Separation Model)
包含~译模式? 在每个模板被实例化的文g中包含函数模板的定义, q且往往把定义放在头文g? 向对内联函数左那?/span>
--~点: 函数模板?body)描述了实现细?/span>
分离~译模式? 函数模板声明攑֜头文件中, 函数模板定义攑֜cpp文g?/span>
//.h
template <typename Type> Type min(Type t1, Type t2);
//.cpp
export template <typename Type>
Type min(Type t1, Type t2) { /* ... */ }
//关键?export! 可导出的模板
//q不是所有的~译器都支持分离模式
]]> xl习 http://www.shnenglu.com/jianc/archive/2012/03/09/167484.htmljianc jianc Fri, 09 Mar 2012 05:53:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/09/167484.html http://www.shnenglu.com/jianc/comments/167484.html http://www.shnenglu.com/jianc/archive/2012/03/09/167484.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/167484.html http://www.shnenglu.com/jianc/services/trackbacks/167484.html
stl 扑և数组的最?
#include < iostream > #include < string > #include < algorithm > #include < vector > using namespace std; template < typename Type, int size > Type getMin(const Type ( & arr)[size]) { cout << " Size: " << size << endl; vector < Type > vec(arr, arr + size); sort(vec.begin(), vec.end()); return vec[ 0 ]; } int main( int argc, char * argv[]) { int arr[] = { 4 , - 3 , 2 , 4 , 5 , 3 , 4 , 3 } ; cout << getMin(arr) < < endl; return 0 ; }
stl删除重复数据
#include < iostream > #include < vector > #include < algorithm > #include < iterator > using namespace std; template < typename Type > void display( const vector < Type >& vec) { vector < Type > ::const_iterator iter = vec.begin(); while (iter != vec.end()) { cout << * iter << " " ; iter ++ ; } cout << endl; } int main( int argc, char * argv[]) { const int Len = 12 ; int arr[Len] = { 2 , 2 , 3 , 2 , 1 , 2 , 3 , 4 , 5 , 4 , 5 , 6 }; vector < int > vec(arr, arr + Len); sort(vec.begin(), vec.end()); display(vec); vector < int > ::iterator iterBegin = vec.begin(); vector < int > ::iterator iterEnd = unique(vec.begin(), vec.end()); // L重复?/span> display(vec); while (iterBegin != iterEnd) { cout << * iterBegin << " " ; iterBegin ++ ; } cout << endl; return 0 ; }
map字符?/h3>
#include < string > #include < map > #include < algorithm > #include < iostream > using namespace std; int main( int argc, char * argv[]) { map < char , int > mObj; string str; cin >> str; for ( int i = 0 ; i < str.size(); ++ i) { if (mObj.count(str[i])) mObj[str[i]] ++ ; else mObj.insert(map< char , int > ::value_type(str[i], 1 )); } map < char , int > ::iterator iter = mObj.begin(); while (iter != mObj.end()) { cout << iter -> first << " : " << iter -> second << endl; ++ iter; } return 0 ; }
]]> C++Primer MW记10 函数重蝲(待更? http://www.shnenglu.com/jianc/archive/2012/03/09/167474.htmljianc jianc Fri, 09 Mar 2012 03:59:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/09/167474.html http://www.shnenglu.com/jianc/comments/167474.html http://www.shnenglu.com/jianc/archive/2012/03/09/167474.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/167474.html http://www.shnenglu.com/jianc/services/trackbacks/167474.html 2.链接提示Wextern "C"只能指定重蝲函数集中的一个函?br /> --因ؓ重蝲函数? 需要c++的名字改~功? 才能区分不同的函? 而extern "C"是指明了不要q行名字改编 //其他l节回头再看 ]]> C++Primer MW记9 域和生命?/title> http://www.shnenglu.com/jianc/archive/2012/03/09/167473.htmljianc jianc Fri, 09 Mar 2012 03:40:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/09/167473.html http://www.shnenglu.com/jianc/comments/167473.html http://www.shnenglu.com/jianc/archive/2012/03/09/167473.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/167473.html http://www.shnenglu.com/jianc/services/trackbacks/167473.html 1.上下?context)
2. 全局域内的函数声明将引入全局函数(global function)
3.全局域内的变量将引入全局对象(global object)
4.生命?lifetime)
5.函数声明(declaration) 指定了该函数的名字以及函数的q回cd和参数列?br />
6.函数定义(definition)qؓ函数提供了函C
7.extern为声明但不定义一个对象提供了一U方? --承诺了该对象会在其他地方被定?br />
extern 声明不会引v内存被分?br />
8.c++中有一U机? 通过它可以把函数参数的类型和数目~码在函数名? Ҏ制叫做类型安全链?type-safe-linkage)
9.不同文g中出现同一对象或函数声明的其他cd不匹配情? 在编译或链接时可能不会被捕捉? 因ؓ~译器一ơ只能处理一个文? 他不能很Ҏ地检
查到文g之间的类型违? q些cdq例可能是程序严重错误的Ҏ
10.头文件ؓ所向extern对象声明, 函数声明以及inline函数定义提供了一个集中的位置: q被UC声明的局部化(localization)
11.头文件提供了两个安全保证
保证所有文仉包含同一个全局对象或函数的同一份声?br />
如果需要修改声? 则只需要改变一个头文g
--只在本cpp用的全局函数, 该不该定义在头文仉?
12.局部对?local object)
自动对象(automatic object) --E序q行?br />
寄存器对?register object) --如果所选择的变量被频繁使用, 则寄存器变量可以提高函数的执行速度
局部静态对?local static object)
13.当一个自动变量的地址呗存储在一个生命期长与它的指针? 该指针被UCؓI悬指针(dangling pointer)
14.动态分配的对象被分配在E序的空闲存储区(free store)的可用内存池?br />
15.new表达式失败时, 通常会抛出bad_alloc异常
16.应用delete表达式失? 使内存无法返回空闲存储区, UC内存泄露(memory leak)
17.对用一内存应用了两ơdelete表达? 通常发生在两个指针指向同一个动态分配对象的时? q是一个很难跟t的问题
18.在对象被释放后读写该对象, q常怼发生, 因ؓdelete表达式应用的指针没有被设|ؓ0
19.为帮助程序员更好地管理动态分配的内存, c++库提供了auto_ptrcȝ型的支持 --指针
20.auto_ptrcL板头文g<memory>
auto_ptr<int>pi(new int(1024));
//pi是局部智能指? 当pi生命期结束时? 会自动释放pi指向的堆I间
Z判断auto_ptr对象是否指向了一个对? 可以用操作get()q回auto_ptr对象内部的底层指?br />
if(p_auto_int.get() != 0 && *p_auto_int != 1024) { ... }
21.在某些情况下, 细节会U聚成可怕的性能瓉, q些l节不应该烦扰那些试图ؓ整个E序提供解决Ҏ的h, 但是q些l节是有l验的程序员应该考虑
?br />
22.定位new表达?br />
new表达式可以允许程序员要求对象创建在已经被分配好的内存中, q种形式的new表达式被UCؓ定位new表达?placement new expression)
new (place_address) type -specifier
place_address必须是个指针
头文?lt;new>
byte *mem = new byte[4096]; //q个是自定义内存?
char *tmp = new(mem) char; //在内存池分配一个char来用?
delete [] mem;
]]> C++Primer MW记8 函数 http://www.shnenglu.com/jianc/archive/2012/03/08/167436.htmljianc jianc Thu, 08 Mar 2012 12:22:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/08/167436.html http://www.shnenglu.com/jianc/comments/167436.html http://www.shnenglu.com/jianc/archive/2012/03/08/167436.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/167436.html http://www.shnenglu.com/jianc/services/trackbacks/167436.html
2.按g?pass-by-value)
3.某些情况? ~译器自动将按D回{换到按引用返? 该优化称为命名返回g?named return value optimization)
4.直接或间接调用自q函数被称为递归函数(recursive function)
5.inline指示对编译器来说只是一个徏? ~译器可以选择忽略该徏?br />
]]> C++Primer MW记7 抽象容器cd http://www.shnenglu.com/jianc/archive/2012/03/08/167416.htmljianc jianc Thu, 08 Mar 2012 09:06:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/08/167416.html http://www.shnenglu.com/jianc/comments/167416.html http://www.shnenglu.com/jianc/archive/2012/03/08/167416.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/167416.html http://www.shnenglu.com/jianc/services/trackbacks/167416.html 1.序容器(sequence container) --拥有由单一cd元素l成的一个有序集?br />
list, vector, deque
2.兌容器(associative container) --支持查询一个元素是否存? q且可以有效地获取元?br />
map, set, multimap, multiset
3.容器的容?--在容器下一ơ需要增长自׃前能够被加入到容器中的元素的L(定w只与q箋存储的容器相?vector, deque, string. 而list不要?/p>
定w)
4.capacity()操作 --求一个容器的定w
5.容器的长?--容器当前拥有元素的个?br />
6.size()操作 --求一个容器的长度
7.数据cd复? vector的效率就低
8.reserve()操作 --允许E序员将容器的容量设|成一个现实指定的?br />
9.q代?iterator) --提供了一U一般化的方? 寚w序或兌容器cd中的每个元素q行q箋讉K
10.每个容器cd都提供了一个begin()和一个end()成员函数
11.begin()q回一个iterator, 指向容器的第一个元?br />
12.end()q回一个iterator, 指向容器的末元素的下一个位|?br />
13.Ziteratorcd, 每个容器q定义了一个const iteratorcd, 对于遍历const容器是必需?br />
14.iterator术论算只适用于vector或deque, 而不适用与list, 因ؓielist的元素在内存中不是连l存储的
15.string.find_first_of()查找与被搜烦字符串中L一个字W相匚w的第一ơ出? q返回它的烦引位|?br />
16.string.substr()生成string对象的字串的一个拷?br />
17.string.rfind()查找最后的指定字串出现的烦?br />
18.string.find_first_not_of()查找W一个不与要搜烦字符串的L字符相匹配的字符
19.string.find_last_of()查找字符串中?与搜索字W串L元素相匹?的最后一个字W?br />
20.string.find_last_not_of()查找字符串中?与搜索字W串L字符全不匚w"的最后一个字W?br />
21.string.erase(pos, num)操作L字符串中的指定串, pos表示位置, num表示L的长?br />
22.<locale>ctypec? {了标准c库函数的功能及一l非成员函数
23.string.compare(pos, num, str); 比较pos位置的后面num个字W是否ؓstr
24.string.insert(pos, newstring); pos表示要插入的位置, newstring表示要插入的字符?br />
25.string.assign(); 字符串拷?br />
26.string.append(); 字符串拼?br />
27.string.swap(); 交换两个字符?br />
28.string.at(); 对字W的下标索引操作, 有对索引D围检? 下标界时抛出out_of_range异常
try {
char ch = st.at(index);
} catch(std::out_of_range) { ... }
29.string.replace(pos, num, newstring); 用newstring代替pos后面num个字W子?br />
30.map 也叫兌数组(associative array) ?值对 key/value
键用来烦引map, 值用作存储和索的数据
map对象定义, 臛_要指明键和值的cd, ?
map<string, int> word_count;
31.map的数据录?br />
map<string, string> str_str;
str_str[string("one")] = string("1"); //q种效率比较?br />
str_str.insert(
map<string, string>::value_type("two", "2")
); //q种效率?br />
32.查找q获取map中的元素
最单的Ҏ:
value = mapObj[key];
但这h个问? 如果不存在keyq个? mapObj׃插入key? q把对应的valuegؓ默认? q样得到的value是无效的
所? 应该q样?br />
if(mapObj.count(key))
value = mapObj[key];
或者这?
map<keyType, valueType>::iterator iter = mapObj.find(key);
if(iter != mapObj.end())
value = mapObj[key];
33.从map中删除元?br />
erase操作
mapObj.erase(key);
q有两种重蝲方式, 详见文
mapObj.clear(); 清空map对象所有?br />
34.set对象插入元素
#include <set>
set<setType> setObj;
setObj.insert(key);
35.set对象查找元素
setObj.count(key); //1? 0没有
setObj.find(key); iter为setObj.end()表示没有
36.multiset和multimap允许要被存储的键出现多次
对于multiset和multimap的P代策略是联合使用findq回的iterator和countq回的?
count = mulsetObj.count();
multiset<type>::iterator iter;
iter = mulsetObj.find(key);
for(int i = 0; i < count; ++i, ++iter)
do_something(*iter);
另一U方法是使用equal_range()q回的iterator?br />
如果q个值存? 则第一个iterator指向该值的W一个实? 且第二个iterator指向q个值的最后一个实例的下一个位|?
switch(mulmapObj.count) {
case 0: break; //不存?br />
case 1: //只有一? 用普通的find操作
multimap<keyType, valueType>::iterator iter;
iter = mulmapObj.find(key);
do_something(*iter);
break;
default: //有许多项
typedef multimap<keyType, valueType>::iterator it;
pair<it, it>pos;
pos = mulmapObj.equal_range(key);
for(; pos.first != pos.second; pos.first++)
do_somethine(*pos.first);
}
//对应? 删除的话用mulmapObj.erase(pos.first, pos.second);
//不支持下标操作是讉Kmultimap元素的一个限?
mulmapObj[key]; //错误
37.栈容?stack container)支持的操?//头文?lt;stack>
empty()
size()
pop()
top()
push(item)
38.栈类型被UCؓ容器适配?container adapter)
39.~省情况? 栈用容器cddeque实现, 改变q个~省值可以这?
stack<type, list<type>> stackObj; //Ҏ用容器类型list实现
//一般是定义一个指针栈
class CTest;
stack<CTest*> ctestStack;
40.标准库提供了两种风格的队? queue(队列), priority_queue(优先U队?
头文?<queue>
41.queue和priority_queue操作
empty()
size()
pos()
front() //只能用在一般队?br />
back() //只能用在一般队?br />
top() //只能用在优先U队?br />
push(item)
]]> C++Primer MW记6 语句 http://www.shnenglu.com/jianc/archive/2012/03/07/167328.htmljianc jianc Wed, 07 Mar 2012 09:00:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/07/167328.html http://www.shnenglu.com/jianc/comments/167328.html http://www.shnenglu.com/jianc/archive/2012/03/07/167328.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/167328.html http://www.shnenglu.com/jianc/services/trackbacks/167328.html
2.故意省略break的case标签应该提供一条注? 以指明这U省略是故意?br />
3.isalpha() 标准c?判断一个字W是否ؓ一个英文字?--头文?ctype.h
]]> C++Primer MW记5 表达?/title> http://www.shnenglu.com/jianc/archive/2012/03/07/167321.htmljianc jianc Wed, 07 Mar 2012 07:45:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/07/167321.html http://www.shnenglu.com/jianc/comments/167321.html http://www.shnenglu.com/jianc/archive/2012/03/07/167321.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/167321.html http://www.shnenglu.com/jianc/services/trackbacks/167321.html 1.昄cd转换(explicit conversion) 2.强制cd转换(cast) 3.c++ limits提供了与内置cd表示有关的信?br />4.pȝ为每个程序都提供了一个在E序执行时可用的内存?I闲存储区free store 或堆 heap) 5.动态内存分?dynamic memory allocation) 6.bitset操作 test(pos) pos位是否ؓ1? any() L位是否ؓ1? none() 是否没有位ؓ1? count() 值是1的个?br /> size() 位元素的个数 [pos] 讉Kpos?br /> flip() {所有位 flip(pos) {pos?br /> set() 所有位|? set(pos) pos位置1 reset() 所有位|? reset() pos位置0
bitset操作头文?<bitset> 7.bitset?U声明方? bitset<32>bitvec; bitset<32>bitvec(0xffff); bitset<32>bitvec("101010"); 8.bitset转成string对象: bit.to_string(); 9.bitset转成unsigned long型整?br /> bit.to_ulong(); 10.昄cd转换 static_cast dynamic_cast const_cast reinterpret_cast 虽然有时候确实需要强制类型{? 但是它们也是E序错误的源? 11.M非const数据cd的指针都可以被赋值给void*型的指针 void*型的指针被称为泛?generic)指针 void*型指针不能直接被解除引用 12.const_cast 转换D辑ּ的常量?以及volatile对象的volatile? 13.~译器隐式执行的Mcd转换都可以由static_cast昄完成 14.dynamic_cast支持在运行时刻识别有指针或引用的cd?/p>
]]> C++Primer MW记4 C++数据cd http://www.shnenglu.com/jianc/archive/2012/03/07/167310.htmljianc jianc Wed, 07 Mar 2012 05:09:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/07/167310.html http://www.shnenglu.com/jianc/comments/167310.html http://www.shnenglu.com/jianc/archive/2012/03/07/167310.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/167310.html http://www.shnenglu.com/jianc/services/trackbacks/167310.html
2.文字帔R是不可寻址?nonaddressable)
3.c++关键? asm, auto, bool, breek, case, catch, char, class, const, const_cast, continue, default, delete, do, double, dynamic_cast
else, enum, explicit, export, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, operator
private, protected, public, register, renterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch,
template, union, unsigned, using, virtual, void, volatile, wchar_t, while
4.全局?global scope)
5.replace用法: replace(string.begin(), string.end(), 'a', 'b'); //把string里的a替换成b
6.数(magic number) --重要性在上下文中没有体现出来
7.c++不支持在枚D成员之间的前后移?br />
8.vectorcMؓ内置的数l提供了一U代替表C?br />
9.vector有两U不同Ş? 数组习惯; stl习惯
10.size()查询vector大小
11.empty()试vector是否为空
12.push_back()在vector后面插入一个元?br />
13.volatile --~译器执行的某些例行优化行ؓ不能应用在已指定为volatile的对象上
14.paircd --把相同类型或不同cd的两个值关联v?br />
头文?lt;utility>
pair<string, string> author("abc", "def");
pair的成员访问符 first second
]]> C++Primer MW记3 C++览 http://www.shnenglu.com/jianc/archive/2012/03/06/167252.htmljianc jianc Tue, 06 Mar 2012 08:52:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/06/167252.html http://www.shnenglu.com/jianc/comments/167252.html http://www.shnenglu.com/jianc/archive/2012/03/06/167252.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/167252.html http://www.shnenglu.com/jianc/services/trackbacks/167252.html
2.静态内存分配是在程序执行之前进行的, 效率比较? 但缺灵zL?br />
3.动态内存分配是在程序执行之后进行的, 效率比较? 但灵zL高
4.内存泄露(memory leak) --有相应识别内存泄露的工具
5.成员讉K操作W?member access operator)
6.公有成员提供了类的公有接?public interface) --实现了这个类的行为的集合
7.U有成员提供U有实现代码(private implementation) --存储信息的数?br />
8.cȝ公共接口与私有实C码的分离 --UCؓ信息隐藏
9.信息隐藏的好? 化类功能的修改于扩展, 方便错误的检?br />
10.内联函数(inline function) 在调用点上展开
11.函数重蝲(function overloading)
12.cd操作W?class scope operator) --cd::
13.域操作符(scope operator) --::
14.局?local scope)
15.拯构造函?copy constructor)
16. cd object;
cd obj1 = object; --调用拯构造函?br />
cd obj2(object); --调用拯构造函?br />
17.引用(reference)
18.析构成员函数(destructor member function)
19.操作W重?operator overloading)
20.基类(base class)
21.zc?derived class)
22.子类(subtype)
23.如果希望防止zcȝ接访问某个成? 可以把该成员声明为private成员
24.如果信某个成员提供了派生类需要直接访问的操作或数据存? 而且通过q个成员, zcȝ实现会更有效, 则声明ؓprotected成员
25.基类的构造函数没有被zcȝ?析构函数和拷贝赋值操作符也同h有被l承)
26.多?multiple inheritance)
27.虚拟l承(virtual inheritance)
28.RTTI(q行时刻cd识别) --在程序执行过E中L一个点? 能够查询某类的引用或指针指向的实际类?br />
29.cd/子类型承关pL映了一U?is-a(是一U?"的关p?br />
30.泛型设计(Generic)
31.异常(exception)
32.异常处理(exception handling) --异常处理设施大大地减了E序代码的长度和复杂?br />
33.E序调用?Program call stack)
34.名字I间namespace
35.使用带有_选择功能的using声明代替using指示W?br />
36.vector --向量
37.头文?<vector>
38.q代器是一个支持指针类型抽象的cd?br />
39.搜烦(search)法: find(), find_if(), search(), binary_earch(), count(), count_if()
分类排序(sorting)与通用排序(ordering)法: sort(), partial_sort(), merge(), partition(), rotate(), reverse(), random_shuffle()
删除(deletion)法: unique()和remove()
术(numeric)法: accumulate(), partial_sum(), inner_product() 和adjacent_difference()
生成(generation)和变?mutation)法: generate(), fill(), transformation(), copy(), for_each()
关系(Relational)法: equal(), min(), max()
40.法头文?<algorithm>
]]> C++Primer MW记2 开?/title> http://www.shnenglu.com/jianc/archive/2012/03/06/167237.htmljianc jianc Tue, 06 Mar 2012 05:09:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/06/167237.html http://www.shnenglu.com/jianc/comments/167237.html http://www.shnenglu.com/jianc/archive/2012/03/06/167237.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/167237.html http://www.shnenglu.com/jianc/services/trackbacks/167237.html 2.函数原型(function prototype) 3.调用(invoke) 4.渐进式生成程序的Ҏ(先写哑函? 后面再用真正的实现来代替q些哑函? 5.试图一下子写出完整的功能E序, 几乎不肯?br />6.Conversioncd转换 7.q代(iterate), 循环(loop) 8.预处理指C符(preprocessor include directive) 9.~译c++E序, ~译器会自动预处理__cplusplus 10.~译cE序, ~译器自动预处理__STDC__ 11.__STDC__和__cplusplus不会同时被定?br />12.__LINE__记录文g已经被编译的行数 13.__FILE__记录正在被编译的文g名字 14.__TIME__记录当前~译旉 15.__DATE__记录当前~译日期 ]]> C++Primer MW记1 c++概述 http://www.shnenglu.com/jianc/archive/2012/03/06/167233.htmljianc jianc Tue, 06 Mar 2012 03:44:00 GMT http://www.shnenglu.com/jianc/archive/2012/03/06/167233.html http://www.shnenglu.com/jianc/comments/167233.html http://www.shnenglu.com/jianc/archive/2012/03/06/167233.html#Feedback 0 http://www.shnenglu.com/jianc/comments/commentRss/167233.html http://www.shnenglu.com/jianc/services/trackbacks/167233.html
2.Z对象(object based)的程序设?br />
3.通过一l数据抽象来建立问题的模? 在c++中体Cؓc?br />
4.与每个类相关的算法称为类的公有接?public interface)
5.面向对象的程序设计方法通过l承(inheritance)机制和动态绑?dynamic binding)机制扩展了抽象数据类?br />
6.l承机制对现有实C码重?br />
7.动态绑定对现有接口的重?专家:不要对实现编E? 要对接口~程)
8.c++支持多种E序设计Ҏ(~点, 使得语言q于庞大, 复杂)
]]>
þþƷĻ |
þAV |
þۺ77777 |
þҹɫtvվ |
99Ʒþ |
þþƷAV뽿ɫ
|
97þóƷɰ |
þù¶ƷӰ |
һþöAV |
þĻ |
þþþһ |
һAvëƬþþƷ |
þþþþþþŮ |
Ʒ99þþþþլС˵
|
8090Ʒþһ |
˾þۺӰԺ |
ɫۺϾþþþ |
þþþƷ |
ھƷžžþþþƷ |
97þ㽶߿ۿ |
þ93Ʒ91þۺ |
ŷպþþƷ |
ɫۺϾþþþþþþ |
99þó˹Ʒ |
þþƷһ |
þþۺϾɫۺϾ |
ŷ߽˾þ |
þ¾Ʒ |
Ӱ7777þþƷˬ |
þˬˬƬAV |
þԭƷ |
պһƵþ |
þþƷˮavۺ
|
þҹɫƷվ |
þwww˳ɾƷ㽶 |
97Ʒ˾þþô߽97 |
99þþƷձһ |
þ |
þۺۺϾþ97ɫ |
þɧ |
þþAVҰ |