随笔分类 -  C/C++

摘要:#estl 第50条:熟悉与STL相关的web站点。三个:www.sgi.com/tech/stl、www.stlport.org 和 www.boost.org。 #estl 第49条:学会分析与STL相关的编译器诊断信息。嗯,第一招是替换大法,然后介绍了一下与容器、插入迭代器、绑定器、输出迭代器 阅读全文
posted @ 2011-07-14 22:42 小 楼 一 夜 听 春 雨 阅读(555) 评论(0) 推荐(0)
摘要:ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1、插入器(<<) 向流输出数据。比如说系统有一个默认的标准 阅读全文
posted @ 2011-07-12 11:49 小 楼 一 夜 听 春 雨 阅读(649) 评论(0) 推荐(0)
摘要:在std::list中删除一个元素非常简单,直接使用erase方法即可,代码如下: for(iter = list.begin(); iter != list.end();) {if (shouldDelete(*iter))iter = list.erase(iter);else++iter;} 阅读全文
posted @ 2011-07-08 10:56 小 楼 一 夜 听 春 雨 阅读(14770) 评论(0) 推荐(1)
摘要:#include<stdio.h> 定义函数 int sscanf (const char *str,const char * format,........); 函数说明 sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的 阅读全文
posted @ 2011-06-09 15:59 小 楼 一 夜 听 春 雨 阅读(150186) 评论(3) 推荐(18)
摘要:01.#include <iostream> 02.#include <list> 03.#include <boost/any.hpp> 04. 05.typedef std::list<boost::any> list_any; 06. 07.//关键部分:可以存放任意类型的对象 08.void 阅读全文
posted @ 2011-04-11 23:33 小 楼 一 夜 听 春 雨 阅读(25708) 评论(0) 推荐(1)
摘要:case语句中若不加大括号则不能声明新的变量或者函数。。。case 1:break;case 1:{}break; 阅读全文
posted @ 2011-03-26 10:19 小 楼 一 夜 听 春 雨 阅读(322) 评论(0) 推荐(0)
摘要:[c、c++]宏中"#"和"##"的用法(zz)宏中"#"和"##"的用法一、一般用法我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起.用法:#include<cstdio>#include<climits>using namespace std; #define STR(s) #s#define CONS(a,b) int(a##e##b)int main(){ printf(STR(vck)); // 输出字符串"vck" printf("%d 阅读全文
posted @ 2011-03-08 10:17 小 楼 一 夜 听 春 雨 阅读(304) 评论(0) 推荐(0)
摘要:wfstream f(data_file, wfstream::in); while( !f.eof() && f.good() ) { TCHAR sz[1024 * 128 ] = {0}; f.getline(sz, (sizeof(sz) / sizeof(wchar_t)) - 1); }两个说明,一是fstream.getline的第二个参数需要传入字符数,而非字节数,文档中没有明确说明,俺在这里栽过。二是,如果单行超过了缓冲,则循环会结束,因为f.good()返回false。总结:用getline的时候,一定要保证缓冲区够大,能够容纳各种可能的数据行。切记传入字符 阅读全文
posted @ 2011-01-29 21:05 小 楼 一 夜 听 春 雨 阅读(4527) 评论(0) 推荐(0)
摘要:toupper, tolower地球人都知道 C++ 的 string 没有 toupper ,好在这不是个大问题,因为我们有 STL 算法:string s("heLLo");transform(s.begin(), s.end(), s.begin(), toupper);cout << s << endl;transform(s.begin(), s.end(), s.begin(), tolower);cout << s << endl;当然,我知道很多人希望的是 s.to_upper() ,但是对于一个这么通用的 b 阅读全文
posted @ 2011-01-29 19:52 小 楼 一 夜 听 春 雨 阅读(2310) 评论(0) 推荐(0)
摘要:includes:测试有序序列中是否包含另一个序列的全部元素。template<class inputIterator1, class inputIterator2>bool includes(inputIterator1 first1, inputIterator1 last1, inputIterator2 first2, inputIterator2 last2);template<class inputIterator1 , class inputIterator2, class Comp>bool includes(inputIterator1 first1, 阅读全文
posted @ 2011-01-28 22:15 小 楼 一 夜 听 春 雨 阅读(6513) 评论(1) 推荐(1)
摘要:对输入流操作:seekg()与tellg()对输出流操作:seekp()与tellp()下面以输入流函数为例介绍用法:seekg()是对输入文件定位,它有两个参数:第一个参数是偏移量,第二个参数是基地址。对于第一个参数,可以是正负数值,正的表示向后偏移,负的表示向前偏移。而第二个参数可以是:ios::beg:表示输入流的开始位置ios::cur:表示输入流的当前位置ios::end:表示输入流的结束位置tellg()函数不需要带参数,它返回当前定位指针的位置,也代表着输入流的大小。假设文件test。txt为以下内容:hello,my worldname:hehonghuadate:200909 阅读全文
posted @ 2011-01-28 20:24 小 楼 一 夜 听 春 雨 阅读(17501) 评论(0) 推荐(3)
摘要:#pragma oncetemplate <typename T>class PtrData{friend class CSmartPtr<T>;public:explicit PtrData( const T* pT):p_(pT) { count_ = 1; }~PtrData() { delete p_; count_ = 0; }void operator ++ () { ++count_; }void operator -- () { --count_; if (count_ == 0) { delete this; } }T* operator -> 阅读全文
posted @ 2011-01-27 23:02 小 楼 一 夜 听 春 雨 阅读(478) 评论(0) 推荐(0)
摘要:持久对象(persistent objects)广泛应用于游戏、分布式数据库系统、多媒体以及图形应用程序中。目前C++并不直接支持持久性(persistence)(但有一些在C++未来版本中添加持久性和反射(reflection)的建议)。持久对象可以在创建它的程序的作用域之外保持自身状态。把对象写入一个文件并在以后重建之,或者把对象传送到一台远程机器,就是这样的例子。对持久性的支持并不象第一眼看上去那样简单,同一对象的大小和内存布局在不同的平台上可能并不相同,而不同的字节次序(byte ordering),或称为endian-ness,使事情更加复杂化。在下文中我将讨论如何实现持久性,而无. 阅读全文
posted @ 2011-01-21 00:25 小 楼 一 夜 听 春 雨 阅读(670) 评论(0) 推荐(0)
摘要:boost::shared_ptr的win32实现中,没有使用类似mutex机制却能够实现线程安全。 线程安全主要就是保证引用计数机制的线程安全 win32实现中关键在于使用了 BOOST_INTERLOCKED_DECREMENT以及BOOST_INTERLOCKED_INCREMENT 在int 阅读全文
posted @ 2011-01-19 11:36 小 楼 一 夜 听 春 雨 阅读(2723) 评论(0) 推荐(0)
摘要:#include <iostream>#include <fstream>#include <algorithm>#include <cassert>#include <numeric>#include <string>using namespace std;int main(){vector<int> vec_int;for (int i=0; i<10; i++)vec_int.push_back(i);partial_sum(vec_int.begin(), vec_int.end(), vec_i 阅读全文
posted @ 2011-01-17 23:54 小 楼 一 夜 听 春 雨 阅读(1301) 评论(0) 推荐(0)
摘要:以前是一个人闷头写代码。工作久了,发现同行们的代码基本都不能看,当然不少还来自大公司。因此大公司的代码也基本不能看。在学校里就听说过许多同学的憧憬,要进什么大公司学技术,现在看来真是好笑,能学到才怪呢。游戏行业我还蛮清楚,暴雪不知道,反正一直很崇拜,代码应该牛逼,看招聘就能看出来,不懂游戏的别来这里玩。牛逼。其他公司,包括所有的日本公司+中国公司代码都不堪入目。1.首先我觉得写代码之前要了解自己,所为有所为,有所不为,并不是所有优雅的东西都是每个人都能写出来的。如果人人都能写出美的东西,那也不能称之为美了,大便之所以不香是因为你随便就能得到。因此有时候一味去追求好的设计,无异于搬起石头砸自己脚 阅读全文
posted @ 2011-01-08 21:58 小 楼 一 夜 听 春 雨 阅读(351) 评论(0) 推荐(0)
摘要:ios::in和ios::out分别表示读打开和写打开 ios::app表示在文件末尾追加 ios::ate:打开文件之后令读写位置移至文件尾端(at end)ios::ate是打开文件时定位到文件末尾 ios::trunc:将先前的文件内容移除(Remove) 阅读全文
posted @ 2011-01-04 09:56 小 楼 一 夜 听 春 雨 阅读(407) 评论(0) 推荐(0)
摘要:int sprintf( char *buffer, const char *format [, argument] ... );除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。printf和sprintf都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。1. 格式化数字字符串sprintf最常见的应用之一莫过于把整数打印到字符串中,所以,sprit 阅读全文
posted @ 2010-12-03 13:11 小 楼 一 夜 听 春 雨 阅读(25879) 评论(0) 推荐(3)
摘要:让我们假设有一个支持默认构造函数以及从一个double构造和赋值的Widget类:class Widget {public: Widget(); Widget(double weight); Widget& operator=(double weight); ...}现在让我们假设我们想建立一个从int到Widget的map,而且我们想有初始化有特定值的映射。这可以简化为:map<int, Widget> m;m[1] = 1.50;m[2] = 3.67;m[3] = 10.5;m[4] = 45.8;m[5] = 0.0003;实际上,简化掉的唯一事情是忘了实际上的进行 阅读全文
posted @ 2010-11-23 10:54 小 楼 一 夜 听 春 雨 阅读(2120) 评论(0) 推荐(0)
摘要:在写代码的时候,即使编程老手经常会遇到一个不知道如何抉择的事情,面对查询的需求如何选择容器,容器的大小等因素也会困扰我们的选择。为什么呢?新手面对查询往往会直接选择map,因为map是内部是支持查询函数的,但老手知道map是通过复杂性换取查询的性能的(map的实现往往是红黑树),那如果要保存的数据个数不多呢,是否值得使用map这样的容器呢?最近两天写了几行短小的代码,针对这个问题进行了一测试,测试对vector,map,hash_map三种有代表性的容器进行了测试,测试容器的长度为10,50,100,200,500,1000.测试的方法是使用int作为测试对象,vector的查询使用顺序查找, 阅读全文
posted @ 2010-11-22 21:54 小 楼 一 夜 听 春 雨 阅读(376) 评论(0) 推荐(0)