前面我们使用了uninitialized_fill,来批量初始化某一段内存. 下面提供三个函数的实现代码,这三个代码的共同点是: 1.遇到错误,抛出异常 2.出现异常时,把之前构造的对象全部销毁 所以,这三个函数要么成功,要么无任何副作用.使用异常来通知使用者,所以在catch块中,处理完异常后要将异常再次向外抛出. #ifndef MEMORY_HPP #define MEMORY_HPP #include <iterator> template <typename ForwIter,…
上一篇我们提到了new运算符以及它的工作步骤,其实无非是把两项工作独立出来: 1.申请原始内存 2.执行构造函数 delete也涉及了两个工作: 1.执行析构函数 2.释放原始内存 其实标准库提供了另外一种更加高级的手段实现内存的分配和构造,就是std::allocator<T>的职责. allocator提供了四个操作: a.allocate(num) 为num个元素分配内存 b.construct(p) 将p所指的元素初始化 destroy(p) 销毁p指向的元素 deallocate(p…
我的strcat: char *strcat(char *dest,char *src) { char * reval = dest; while(*dest) dest++; while(*src) *dest++ = *src++ ; *dest = *src; return reval; } MSVC: char * __cdecl strcat ( char * dst, const char * src ) { char * cp = dst; while( *cp ) cp++; /…
1.OS基础操作 //获取主机名 os.Hostname() //获取当前目录 os.Getwd() //获取用户ID os.Getuid() //获取有效用户ID os.Geteuid() //获取组ID os.Getgid() //获取有效组ID os.Getegid() //获取进程ID os.Getpid() //获取父进程ID os.Getppid() //获取环境变量的值 os.Getenv("GOPATH") //设置环境变量的值 os.Setenv("ORAC…
创作不易,多多支持! 再说此函数之前,先来说一下EOF是什么 EOF,为End Of File的缩写,通常在文本的最后存在此字符表示资料结束. 在C语言中,或更精确地说成C标准函式库中表示文件结束符.这种以EOF作为文件结束标志的文件,必须是文本文件.在文本文件中,数据都是以字符的ASCII代码值的形式存放.我们知道,ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志 一般结尾都有一个隐藏字符"EOF",当程序读取它的时候,就会知道文件已经到达结尾 可…
原创作品,转载请注明出处:http://www.cnblogs.com/shrimp-can/p/5280566.html iterator类型: iterator:到value_type的访问,value_type是模板的类型 const_iterator:到const value_type的访问 reverse_iterator:reverse_iterator<iterator> const_reverse_iterator:reverse_iterator<const_itera…
标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯定的.也许有人会说,即使不用MFC框架,也可以想办法使用MFC中的API,具体的操作方法在本文最后给出操作方法.其实,可能很多人很可能会忽略掉标准C++中string类的使用.标准C++中提供的string类得功能也是非常强大的,一般都能满足我们开发项目时使用…
时间过得很快,又是一周过去了,今天感觉迷迷糊糊的,不在状态,然后,下面开始我们的讲解,还是跟大家分享一下我自己的一些想法,第一.怎么讲了,就是各位如果有怀才不遇的想法,我感觉最好不要有这种想法;第二.需要竞争对手:第三.坚持:第四.苏格拉底的徒弟,柏拉图:第五.讲课本身,锻炼了我的表达能力:第六.毅力:第七.边讲解边学习:第八.坚持:第九.functoolslambda函数.3.1 functools:管理函数的工具----------------------------3.1.1 修饰符---…
我的memcmp: int memcmp(void *buf1, void *buf2, unsigned int count){ int reval; while(count && !(reval = (*(unsigned char *)buf1) - (*(unsigned char *)buf2))) { buf1 = (unsigned ; buf2 = (unsigned ; --count; } return reval; } MS VC: int __cdecl memcm…
我写的memchr: void *memchr(const void *buf, char ch, unsigned count){ unsigned ; while(*(buf++) != ch && cnt <= count){cnt++;} if(cnt > count) return NULL; else return buf; } 红色部分报错. 该错误为为ANSIC中认定的错误,是因为它坚持:进行算法操作的指针必须是确定知道其指向数据类型大小的. 但是GNU则不这么…