GeekBand之STL第一周笔记

课件内容:

part1 C++模板介绍

part2 泛型编程

part3 容器

part4 一些进阶问题

C++主要有两种类型的模板

1.类模板(Class template):使用泛型参数的类

2.函数模板(Function template):使用泛型参数的函数

模板实例化:显示和隐式两种方式

类模板实参可以是某一型别或常量(仅限int或enum)

C++类模板的声明注意事项:

1.声明类模板和声明函数模板类似

2.关键字class和typename都可以用,但还是倾向于使用typename

templateclass Stack{......};

template class Stack{......};

3.在类模板内部,T可以像其他型别一样(比如int,char等)定义成员变量和成员函数

void Push(const T const& element);

int Pop(T& element);

int Top(T& element) const;

std::vector m_Members;

泛型编程(Generic programming)

1.概观(OverView):泛型编程作为一种编程思维和想法,它是一种编程方法,不依赖于具体的语言。

2.关联特性(Traits)

3.迭代器(Iterators):迭代器是指针的泛化(generalization of pointers)

3.1迭代器本身是一个对象,指向另外一个(可以被迭代的)对象。

3.2用来迭代一组对象,即如果迭代器指向一组对象中的某个元素,则通过increment以后它就可以指向下一组对象中的一个元素。

迭代器(1)

迭代器是指针的泛化(generalization of pointers)

迭代器本身是一个对象,指向另外一个(可以被迭代的)对象

用来迭代一组对象,即如果迭代器指向一组对象中的某个元素,则通过increment以后它就可以指向这组对象的下一个元素

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

算法通常以迭代器作为输入参数

容器只要提供一种方式,可以让迭代器访问容器中的元素即可。

迭代器(2)

迭代器的基本思想

1)在STL中,迭代器最重要的思想就是分离算法和容器,使之不需要相互依赖

2)迭代器将算法和容器粘合(stick)在一起从而使得一种算法的实现可以运用到多种不同的容器上,如下面的例子所示,find算法接收一对迭代器,分别指向容器的开始和终止位置:

templalte

inline _InIt find(_InIt _First,_InIt _Last,const _Ty& _Val){

//find frist matching _Val

for(;_First != _Last;++_First)

if(*_First == _Val)

break;

return (_First);

}


Vector

1.Vector是一个能够存放任意型别的动态数组

2.Vector的数据结构和操作于数组类似,在内存中的表示是一段地址连续的空间。

3.Vector与数组的区别在于,数组大小往往是定义的时候已经指定,而Vector支持动态空间大小调整,随着元素的增加,Vector内部会自动扩充内存空间。

4.为了使用Vector,必须用include指令包含如下文件,并通过std命名空间去访问:

#include

int main(){

std::vector v;

}

创建Vector


GeekBand之STL第一周笔记_第1张图片

向Vector中添加元素

GeekBand之STL第一周笔记_第2张图片

判断Vector是否为空


GeekBand之STL第一周笔记_第3张图片

访问Vector里面的元素:

vector::at()  //会进行边界检查,判断是否越界

vector::operator[]   //不进行边界检查,性能较好


GeekBand之STL第一周笔记_第4张图片

删除元素:


GeekBand之STL第一周笔记_第5张图片

Deque是一个能够存放任意型别的双向队列

Deque提供的函数于Vector类似,新增了两个函数:

push_front:在头部插入一个元素

pop_front:在头部弹出一个元素

Deque采用了于Vector不同内存管理方法:大块分配内存

为了使用deque,必须用include指令包含如下文件,并通过std命名空间去访问:

include

int main(){

std::deque dq;

}



GeekBand之STL第一周笔记_第6张图片

List的优势和劣势


GeekBand之STL第一周笔记_第7张图片

常用的操作方法:


GeekBand之STL第一周笔记_第8张图片

你可能感兴趣的:(GeekBand之STL第一周笔记)