STL与泛型编程第一周笔记 GeekBand

2016-06-21  本文已影响0人  CharlesW

本周学习的内容有点多,主要学习了C++中的模板(包括函数模板和类模板)、泛型编程概述和三种容器(vector,deque,list)。

模板

//函数1.

int max(int x,int y);{return(x>y)?x:y ;}

//函数2.
long max( long x,long y){return (x>y)? x:y ;}

//函数3.
double max(double x,double y){return (x>y)? x:y ;}

如果使用模板就能省去一堆冗余代码,

template <typename T> T max(T x, T y){return (x>y)? x:y ;}

C++中有两种类型的模板

  1. 函数模板:使用泛型参数的函数
  2. 类模板:使用泛型参数的类

如果我们打算给模板函数(类)的某个特定类型写一个函数,就需要用到模板的特化,实际上,所谓特化,就是代替编译器完成了对指定类型的特化工作,现代的模板库中,大量的使用了这个技巧。
对于偏特化,则只针对模板类型中部分类型进行特化,如

template<T1, T2>

class MyClass;

template<T1, T2>

class MyCalss<int, T2>//偏特化

泛型编程

泛型编程是一种编程方法,这种方法将型别以一种to-be-specified-later的方式给出,等到需要调用时,再以参数方式,通过具体的、特定的型别实例化一个具体的方法或对象。
面向对象编程关注的是编程的数据方面,而泛型编程关注的是算法。它们之间的共同点是抽象和创建可重用代码,但它们的理念绝然不同。
泛型编程旨在编写独立于数据类型的代码。在C++中,完成通用程序的工具是模板。模板使得能够按泛型定义函数或类,而STL通过通用算法更进了一步。

迭代器

理解迭代器是理解STL的关键所在。模板使得算法独立于存储的数据类型,而迭代器使算法独立于使用的容器类型。

什么是迭代器?

在STL中迭代器是容器于算法之间的接口

迭代器的基本思想

find算法对于不同的容器均适用

using namespace std;

vector<int> v(...);
list<int> l(...);
deque<int> d(...);

vector<int>::iterator itv = find(v.begin(),v.end(),elementToFind);
list<int>::iterator itl = find(l.begin(),l.end(),elementToFind);
deque<int>::iterator itd = find(d.begin(),d.end(),elementToFind);
上一篇 下一篇

猜你喜欢

热点阅读