STL简介

STL


  • STL主要提供容器,适配器,迭代器,算法。

一些概念

  • 适配器(adapter):将一个现成的抽象数据类型放在一个黑盒子中,而在盒内对抽象数据类型的接口进行合理的布局和改进,从而形成新的抽象数据类型接口。改装得到的新抽象数据类型就是适配器
  • 用户程序使用系统程序叫做调用
  • 系统程序使用用户程序叫做回调
  • 递归:递归程序设计是构造算法框架,而数学归纳法是证明框架的正确性。

泛型(generic type)

  • 实现泛型编程主要依靠模板。
//函数模板
template<typename T1, ···,typename Tn> function(){ 
    //code
}
//类模板
template<typename T1, ···,typename Tn> class C{
    //code
};

C++11对泛型设计的改进

  • auto关键字:具有类型自动推导的能力,主要用于不能确定类型的变量(如函数返回值)。

  • decltype表达式:用于对函数返回值的类型推导进行指导。

auto multi(T a,U b) -> decltype(a*b){
    //code
}

算法中的参数

  • 算法中主要是三种参数:
    1. 迭代器参数: 裸指针,五种迭代器
    2. 辅助参数
    3. 谓词参数:实质上是回调函数,主要有函数指针,函数对象,lambda表达式

模板参数

  1. 类型参数
  2. 非类型参数: int,枚举,指针,引用。是常量,不可改变
  3. 模板定义型参数: 强调这个参数的实参必须是类模板,还强调了这个类模板所具有的参数个数。
//类型参数T,非类型参数a。
template<typename T,int a> function(){ 
    //code
}
int x;
function<int,10>(x);    //实例化

lambda 表达式

  • lambda表达式,又叫无名(匿名)仿函数。主要是为了编写一次性代码。
  • 可以在[]中填写lambda表达式拥有的数据成员。
  • mutable:值传递捕获变量可修改说明符。
//无返回值
[](int x){
        cout<<2*x<<endl;
    }(12);

//有返回值的
int a = [](int x) -> int{
    return 2*x;
}(10);

//先定义对象再调用
auto f = [](int x){
    cout<<2*x;
};
f(10);

猜你喜欢

转载自blog.csdn.net/szuhuanggang/article/details/78825955
今日推荐