第1章 C++编程基础
1. 另一种初始化语法:构造函数语法(直接初始化)
第2章 面向过程的编程风格
1. 函数声明给出就是函数原型
第3章 泛型编程风格
1. 泛型算法
2. 容器的insert操作:在position之前插入元素
3. 容器的erase操作删除position所指向的元素
4. 函数对象function objects
函数对象的使用:
#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. 函数对象适配器
示例程序如下:
#include <vector>
#include <functional>
#include <algorithm>
#include <cstdlib>
using namespace std;
vector< int> filter( const vector< int>& vec,
int val, const less< int> <){
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,如果不声明为const的话,需要传入左值。这样在调用的时候,必须声明一个less<int>的实例,然后传入该函数,即:
less<int> ls;
vector<int> nvec=filter(li,val,ls);
如果声明为const后,就可以传入一个右值,正如上面的示例程序中所使用的。
这儿其实就是const引用和非const引用的一个重要区别:可以将非const引用变量和常量来初始化const引用,而不能用常量初始化非const引用。
测试程序:
#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 <iterator>
#include <algorithm>
#include <vector>
#include < string>
using namespace std;
int main(){
istream_iterator< string> is(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:构造函数分配资源,析构函数释放资源