读书笔记之:Essential C++ (2001)[+]

第1章 C++编程基础

1. 另一种初始化语法:构造函数语法(直接初始化)

第2章 面向过程的编程风格

1. 函数声明给出就是函数原型

第3章 泛型编程风格

1. 泛型算法

2. 容器的insert操作:在position之前插入元素

3. 容器的erase操作删除position所指向的元素

4. 函数对象function objects

函数对象的使用:

View Code
#include <iostream>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
int main(){
    int n=10;
    vector<int> li;
    for(int i=0;i<n;i++){                     
        int val=rand()%1000;
        li.push_back(val);
    }
    cout<<"vector:";
    vector<int>::iterator ite;
    for(ite=li.begin();ite!=li.end();++ite)
        cout<<*ite<<' ';
    cout<<endl;
    sort(li.begin(),li.end());
    cout<<"vector:";
    for(ite=li.begin();ite!=li.end();++ite)
        cout<<*ite<<' ';
    cout<<endl;
    sort(li.begin(),li.end(),greater<int>());
    cout<<"vector:";
    for(ite=li.begin();ite!=li.end();++ite)
        cout<<*ite<<' ';
    cout<<endl;
}

 

5. 函数对象适配器

示例程序如下:

View Code
#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
#include <cstdlib>
using namespace std;
vector<int> filter(const vector<int>& vec,
        int val,const less<int> &lt){ 
    vector<int> nvec; 
    vector<int>::const_iterator ite=vec.begin();
    while((ite=find_if(ite,vec.end(),bind2nd(lt,val)))!=vec.end()){
        nvec.push_back(*ite);
        ++ite;
    }   
    return nvec;
}   
int main(){
    int n=10;
    vector<int> li;
    for(int i=0;i<n;i++){
        int val=rand()%1000;
        li.push_back(val);
    }   
    cout<<"vector:";
    vector<int>::iterator ite;
    for(ite=li.begin();ite!=li.end();++ite)
        cout<<*ite<<' ';
    cout<<endl;
    int val=rand()%1000;
//    less<int> ls;
    vector<int> nvec=filter(li,val,less<int>());                     
    cout<<"less than "<<val<<" : ";
    for(ite=nvec.begin();ite!=nvec.end();++ite)
        cout<<*ite<<' ';
    cout<<endl;
    
}

 

这儿需要注意一点,对于filter函数的声明vector<int> filter(const vector<int>& vec, int val,const less<int> &lt);的最后一个参数lt,如果不声明为const的话,需要传入左值。这样在调用的时候,必须声明一个less<int>的实例,然后传入该函数,即:

less<int> ls;

vector<int> nvec=filter(li,val,ls);

 

如果声明为const后,就可以传入一个右值,正如上面的示例程序中所使用的。

这儿其实就是const引用和非const引用的一个重要区别:可以将非const引用变量和常量来初始化const引用,而不能用常量初始化非const引用。

测试程序:

View Code
#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
#include <cstdlib>
using namespace std;
template <class InputIterator,class OutputIterator,
         class ElemType,class Comp>
OutputIterator filter(InputIterator first,InputIterator last,
        OutputIterator at,const ElemType &val,const Comp& pred){
    while((first=find_if(first,last,bind2nd(pred,val)))!=last){
        cout<<"found value: "<<*first<<endl;
        *at++=*first++;
    }
    return at;
}
int main(){
    int n=10;
    vector<int> li;
    srand(time(0));
    for(int i=0;i<n;i++){
        int val=rand()%1000;
        li.push_back(val);
    }
    cout<<"vector:";
    vector<int>::iterator ite;
    for(ite=li.begin();ite!=li.end();++ite)
        cout<<*ite<<' ';
    cout<<endl;                                                    
    int val=rand()%1000;
    vector<int> nvec(li.size());
    filter(li.begin(),li.end(),nvec.begin(),val,less<int>());
    cout<<"less than "<<val<<" : ";
    for(ite=nvec.begin();ite!=nvec.end();++ite)
        cout<<*ite<<' ';
    cout<<endl;

}

 

5. map使用

 

6. 使用set

7. 使用Iterator Inserters:插入适配器

8. 使用iostream iterators

#include <iostream>
 #include <iterator>
 #include <algorithm>
 #include <vector>
 #include <string>
 using namespace std;
 int main(){
     istream_iterator<stringis(cin);
     istream_iterator<string> eof;
     vector<string> text;
     copy(is,eof,back_inserter(text));
     sort(text.begin(),text.end());
     ostream_iterator<string> os(cout," ");
     copy(text.begin(),text.end(),os);
     cout<<endl;                              
 
 }

 

第4章 基于对象的编程风格

1. const与mutable

 

第5章 面向对象的编程风格

1. 派生类覆盖基类的虚函数的时候,返回类型可以不严格的一样。

2. 虚函数的静态决议

 

3. RTTI:typeid和dynamic_cast

第6章 以template进行编程

第7章 异常处理

1. C++中的RAII:构造函数分配资源,析构函数释放资源

 

posted @ 2012-08-16 13:52  Mr.Rico  阅读(...)  评论(... 编辑 收藏