当前课程知识点:C++语言程序设计进阶 >  第十章 泛型程序设计与C++标准模板库 >  顺序容器 >  顺序容器的基本功能

返回《C++语言程序设计进阶》慕课在线视频课程列表

顺序容器的基本功能在线视频

顺序容器的基本功能

顺序容器的基本功能

顺序容器

顺序容器的接口(不包含单向链表(forward_list)和数组(array))

例10-4 顺序容器的基本操作

//10_4.cpp
#include <iostream>
#include <list>
#include <deque>

//输出指定的顺序容器的元素
template <class T>
void printContainer(const char* msg, const T& s) {
    cout << msg << ": ";
    copy(s.begin(), s.end(), ostream_iterator<int>(cout, " "));
    cout << endl;
}

int main() {
    //从标准输入读入10个整数,将它们分别从s的头部加入
    deque<int> s;
    for (int i = 0; i < 10; i++) {
        int x;
        cin >> x;
        s.push_front(x);
    }
    printContainer("deque at first", s);
    //用s容器的内容的逆序构造列表容器l
    list<int> l(s.rbegin(), s.rend());
    printContainer("list at first", l);

    //将列表容器l的每相邻两个元素顺序颠倒
    list<int>::iterator iter = l.begin();
    while (iter != l.end()) {
        int v = *iter;  
        iter = l.erase(iter);
        l.insert(++iter, v);
    }
    printContainer("list at last", l);
    //用列表容器l的内容给s赋值,将s输出
    s.assign(l.begin(), l.end());
    printContainer("deque at last", s);
    return 0;
}
/*  
运行结果如下: 
0 9 8 6 4 3 2 1 5 4
deque at first: 4 5 1 2 3 4 6 8 9 0
list at first: 0 9 8 6 4 3 2 1 5 4
list at last: 9 0 6 8 3 4 1 2 4 5
deque at last: 9 0 6 8 3 4 1 2 4 5
/*



下一节:顺序容器的特征

返回《C++语言程序设计进阶》慕课在线视频列表

顺序容器的基本功能课程教案、知识点、字幕

大家好

回来继续学习C++语言程序设计

这一节我们来学习

顺序容器的基本功能

STL中的顺序容器呢

包括向量 双端队列 列表

单向列表和数组

前面四个在逻辑上可以看作

是一个长度可扩展的数组

但是数组容器呢

它的长度是固定的

顺序容器中的元素

是按照线性次序排列的

可以随时在指定的位置插入元素

和删除元素

而()容器必须符合Assignable

这一概念

也就是说

要具有公有的拷贝构造函数

也叫复制构造函数

并且要可以用赋值运算符

这个数组对象呢

也就是Array对象呢

它的大小是固定的

而单链表也就是forward_list

它有具有特殊的添加和删除操作

所以这两个类型呢

是比较特殊的两个类型

接下来呢

我们来看一下顺序容器

有哪些接口

这里列出的接口

不适用于数组类型

和单链表类型

首先呢

顺序容器

它要有构造函数

要有赋值函数 assign

要有插入函数

这个插入函数呢

有多种

有insert push_front

push_back emplace

emplace_front

这些函数我们在后面

有一些例题中都会看到的

还有多种擦除函数

也就是删除函数

另外有两个首尾元素

直接访问函数

访问容器首 访问容器尾

还有改变大小的resize函数

下面我们就通过一个具体的实例

来熟悉一下

顺序容器的几种基本操作

这里首先我们看

我们这个这个printContainer

这个函数模板

它的作用

是输出指定的顺序容器的元素

需要输出元素的这个容器

用参数s传过来

那么输出容器元素之前呢

需要输出一个字符串

作为提示信息

那么这个提示信息

通过第一个参数传进来

所以先将这个字符串内容输出

然后用这个copy函数

将从s.begin

返回的这个迭代器开始

到s.end返回的这个迭代器结束

这个区间的全部元素

都复制到输出流迭代器

指示的位置去

那么这里呢

是用cout构造的输出流迭代器

那么就复制到标准输出设备了

所以用这样的办法

就将容器s里面从开始

到结束的全部元素

都送到标准输出设备去了

我们看现在主函数中

先读入十个整数

然后把它们全部存到

这个双端队列deque容器s里面

每一次用push_front往里面放

也就是将最新读入的元素

放到双端队列的最头的位置

最开头的位置

实际上这个序列

是一个反向生成的序列

也就是最后读入的元素

在最开头位置

现在我们用
printContaine输出验证一下

输出这个s的内容

我们看到读入的内容是

0 9 8 6 4 3 2 1 5 4

那么输出的内容呢

正好是反过来的次序

因为这个序列是反向生成的

接下来呢

我们再用s容器里面的内容

去构造

去初始化一个新的list对象

一个列表容器对象

那用的时候呢

注意这里面给的两个迭代器

指示它的起始位置和结束位置

都是逆向迭代器

s.rbegin指的实际上是

这个s里面元素的最后一个

s.rend指的是s这个容器的

最开端的位置

所以实际上是一个逆向的

从后往前取数据

这样取完全部s里面的元素

用来构造list对象

构造完这个list对象以后

我们把这个对象

容器对象l我们再输出一下

看一下这个效果

list里面的内容呢是正向的

那么它正好是跟双端队列

deque里面的内容

是反过来的

因为是用逆序的方法构造的

接下来再将列表容器

l里面的每两个相邻的元素呢

顺序进行颠倒

这个事情怎么做的呢

我们首先用l.begin返回指向

容器元素开始位置的迭代器

放在iter里面

我们用iter来遍历整个容器

这个while循环控制

当iter还不等于l.end

返回的迭代器的时候呢

就说明还没有达到表尾

这个时候我们就继续执行循环体

每一轮循环

将iter当前指向的这个元素

暂时存到v里面

然后擦除这个元素

也就是删除它

从列表里面删除它

删除完了以后呢

iter++ 首先++在这里面

指向下一个元素

然后将v插到下一个位置去

这样不就是

相邻元素交换了一下吗

一直这样循环

直到处理完全部的

这个容器里面的元素

然后调用printContainer

输出验证一下

我们看到这个时候

输出的这个list里面的元素

就跟刚才的相比

它都是两两交换了的

最后呢

我们再用列表容器

l里面的全部内容给s赋值

调用s.assign

那需要赋过去的值是什么呢

是从l.begin开始

到l.end结束之间

这个区间内的全部元素

用来赋值给s

经过这样赋值以后呢

s里面的内容

和这个l里面的内容就一样了

最后我们输出这个s

调用printContaine

输出s 验证一下

确实这两个列表里面的元素

这个s和list里面的元素

就一样了

C++语言程序设计进阶课程列表:

第七章 继承与派生

-导学

--导学

-继承的基本概念和语法

--继承的基本概念和语法

-第七章 继承与派生--继承的基本概念和语法习题

-继承方式

--继承方式简介及公有继承

--私有继承和保护继承

-第七章 继承与派生--继承方式

-基类与派生类类型转换

--基类与派生类类型转换

-第七章 继承与派生--基类与派生类类型转换

-派生类的构造和析构

--派生类的构造函数

--派生类的构造函数举例

--派生类的复制构造函数

--派生类的析构函数

--第七章 继承与派生--派生类的构造和析构

-派生类成员的标识与访问

--访问从基类继承的成员

--虚基类

-第七章 继承与派生--派生类成员的标识与访问

-小结

--小结

-综合实例

--第七章综合实例

-实验七

--实验七

-第七章讲义

第八章 多态性

-导学

--导学

-第八章 多态性--导学

-运算符重载

--运算符重载的规则

--双目运算符重载为成员函数

--单目运算符重载为成员函数

--运算符重载为非成员函数

-第八章 多态性--运算符重载

-虚函数

--虚函数

--虚析构函数

--虚表与动态绑定

-第八章 多态性--虚函数

-抽象类

--抽象类

--第八章 多态性--抽象类

-override与final

--override与final

-第八章 多态性--override与final

-小结

--第八章小结

-综合实例

--第八章综合实例

-实验八

--实验八

- 第八章讲义

第九章 模板与群体数据

-导学

--导学

-模板

--函数模板

--类模板

-第九章 模板与群体数据--模板

-线性群体

--线性群体的概念

-第九章 模板与群体数据--线性群体

-数组

--数组类模板

--例9-4数组类应用举例

-链表

--链表的概念与结点类模板

--链表类模板

-第九章 模板与群体数据--链表

-栈

--栈类模板

--栈类模板课后习题

--例9-9 栈的应用

--例9-9 栈的应用课后习题

-队列

--队列类模板

-第九章 模板与群体数据--队列

-排序

--排序概述

--插入排序

--选择排序

--交换排序

-第九章 模板与群体数据--排序

-查找

--查找

--查找课后习题

-小结

--小结

-综合实例

--综合实例

-实验九

--实验九

- 第九章讲义

第十章 泛型程序设计与C++标准模板库

-导学

--导学

-泛型程序设计及STL的结构

--泛型程序设计的基本概念

--STL简介

-第十章 泛型程序设计与C++标准模板库--泛型程序设计及STL的结构

-迭代器

--迭代器

-第十章 泛型程序设计与C++标准模板库--迭代器

-容器的基本功能与分类

--容器的基本功能与分类

-第十章 泛型程序设计与C++标准模板库--容器的基本功能与分类

-顺序容器

--顺序容器的基本功能

--顺序容器的特征

--顺序容器的插入迭代器与适配器

--第十章 泛型程序设计与C++标准模板库--顺序容器

-关联容器

--关联容器分类和基本功能

--集合

--映射

--多重集合和多重映射

-第十章 泛型程序设计与C++标准模板库--关联容器

-函数对象

--函数对象

--函数适配器

-算法

--算法

-小结

--第十章小结

-综合实例

--综合实例

-实验十

--实验十

- 第十章讲义

第十一章 流类库与输入/输出

-导学

--导学

-I/O流的概念及流类库结构

--I/O流的概念及流类库结构

-第十一章 流类库与输入/输出--I/O流的概念及流类库结构

-输出流

--输出流概述

--向文本文件输出

--向二进制文件输出

--向字符串输出

-第十一章 流类库与输入/输出--输出流

-输入流

--输入流概述

--输入流应用举例

--从字符串输入

-第十一章 流类库与输入/输出--输入流

-输入/输出流

--输入/输出流

-第十一章 流类库与输入/输出--输入/输出流

-小结

--小结

-综合实例

--综合实例

-实验十一

--实验十一

- 第十一章讲义

第十二章 异常处理

-导学

--第12章导学

-异常处理的思想与程序实现

--异常处理的思想与程序实现

-第十二章 异常处理--异常处理的思想与程序实现

-异常处理中的构造与析构

--异常处理中的构造与析构

-第十二章 异常处理--异常处理中的构造与析构

-标准程序库异常处理

--标准程序库异常处理

-第十二章 异常处理--标准程序库异常处理

-小结

--第12章小结

-综合实例

--综合实例

-实验十二

--实验十二

- 第十二章讲义

顺序容器的基本功能笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。