这一章讲的是string类型,内容很多,但是不难,都是一些string的成员,需要记住用法。 1.(P474) 和C-string不同,string对象的字符串皆为并没有特殊字符‘\0′ 2.(P474) 在搜寻string时,如果失败,则返回一个特殊值npos,在检验返回值是否是npos时,应该用string::size_type类型去比较,而不是int或unsigned int。 size_type是一个不带正负号的整数型别。要注意类型之间的转换,不要试图拿size_type与int比较,当int变量为0时,size_type任何变量都比0大。(P476例二) npos只是一个表示返回失败的特殊值,并不是string的长度。 3.(P483) 在string的构造函数中: string s(str, stridx) 表示将字符串str内”始于位置stridx”的部分,当做字符串s的初值 string s(chars, chars_len) 表示以C-string chars的前chars_len个字符为字符串s的初值 注意这两个的区别 4.(P484) data()和c_str()返回的字符数组由该字符串本身拥有,所以不要修改它或释放其内存,否则导致字符数组无效。 本章其余都是需要记忆的东西,首先得学会用,然后慢慢的用多了,自然就记住了。
这一章讲了三种容器配接器(container adapter)(Stack, Queue, Priority queue) 和 bitset的特殊容器。 1. 配接器: 一种用来修饰容器(Containers)或仿函数(Functors)或迭代器(Iterators)接口的东西。 例如:STL提供的Queue和Stack,虽然看似容器,其实只能算是一种容器配接器,因为 它们的底部完全借助Deque,所有操作有底层的Deque供应。改变Functor接口者,称为Function Adapter;改变Container接口者,称为Container Adapter;改变Iterator接口者,称为Iterator Adapter。 2.(P435) Stack(栈) class stack<>实作出了一个stack,可以让我们直接使用LIFO的栈。 使用stack<>要加入头文件: 1 #include <stack> 在头文件<stack>中,class stack定义如下: 1 2 3 4 namespace std { template <class T, class Container = deque<T> > class stack; } 带一个template参数代表元素型别,带有默认值的第二个template参数定义stack内部存放元素所用的实际容器,缺省采用queue. 下面使用vector来容纳元素: 1 stack<int, vector<int> > st; stack的内部接口图: 3.(P446) 自定义的Stack [...]
刚换的硬盘,今天使用VS2008,出现“没有找到MSVCP90D.dll…”的问题,百度了以下,找到以下几个解决方法: 1. 本质问题,是磁盘格式的问题,FAT32的就有问题,改成NTFS就OK了。 把FAT32转NTFS有两种方法: ①.cmd命令:convert X:/FS:NTFS (X表示磁盘,比如D盘就把X改成D) ②.用分区工具 2. Same problem MSCVP90D.dill not found, went to “Project | Game Properties | Configuration Properties | C/C++ | Code Generation | Runtime Library” and set Multi-threaded Debug (/MTd),did build generated error messages… then reset “Project | Game Properties | Configuration Properties | C/C++ | Code Generation | [...]
这一章讲的是仿函数(Functor),大陆叫函子(咋听起来那么别扭。。。),需要把第五章的仿函数部分看明白。 1.(P124) 仿函数的基础: 行为类似函数,从实现的角度来看,仿函数是一种重载了Operator()的Class 或 Class Template。一般函数指针可视为狭义的仿函数。 函数行为:指可以”使用小括号传递参数,藉以调用某个东西”, eg. function(arg1, arg2)。 如果希望对象也可以这样,可以通过重载”()”操作符(operator() ),并给予合适的参数型别: 1 2 3 4 5 6 class X{ public: // define "function call" operator return-type operator() (arguements) const; … }; 现在,就可以把这个对象当做函数调用了” 1 2 3 X tk; … tk(arg1, arg2); 上述调用等价于: 1 tk.operator() (arg1, arg2); 2.(P125) 入门级的仿函数程序,可以更清楚的理解神马是仿函数。 1 2 3 [...]