C++深入学习

第一章 stl概述

1.2 STL内容

1.STL主要包含 容器 算法 迭代器 三大部分

2.STL容器包含了绝大多数数据结构,如数组、链表、队列、堆、栈和树等

3.开发者直接应用这些系统 STL 容器相关函数就可以了,而且这些函数都是带模板参数的,可以适应许多数据元素类型,功能非常强大

4.STL 算法包含了诸如增、删、改、查和排序等系统函数,开发者可以直接操作这些函数实现相应功能

5.STL 迭代器类似指针,通过它的有序移动把容器中的元素与算法关联起来,它是实现所有 STL 功能的基础所在。

🔺常用STL包含文件:

选代器: #include <iterator>

输入输出流 :标准输入输出流#include <iostream>

                       文件输人输出流#include <fstream>

                       字符串输入输出流# include <sstream>

字符串:#include <string>

函数对象:#include <functional>

通用容器:向量容器#include <vector>

                  双端队列#include <deque>

                  链表容器# include <list>

                  队列、优先队列#include <query>

                  堆栈#include <stack>

                  集合、多集合、位集合#include <set>

                  映射,多映射#include <map>

通用算法:#include <algorithm>

数值算法:#include <numeric>

PS:STL的包含文件都不加扩展名,以便与 C语言风格的“.h”头文件相区别

1.3 命名空间

STL程序中一般需要加“using namespace std;”这属于命名空间的应用,关键字是namespace

在 C++ 中,名称可以是变量函数结构枚举以及类和结构的成员

名称相互冲突的解决办法:C++ 提出了 namespace 命名空间解决方法,只要再加一层封装就可以了。/ 

/这段代码展示了命名空间的使用方法。命名空间提供了一种将相关的代码组织在一起并避免命名

//冲突的机制。在这个例子中,mycompany和yourcompany命名空间分别包含了具有相同名称的func函数,

//但由于命名空间的存在,它们不会相互冲突,可以在不同的作用域中使用。

#include<stdio.h>

//代码使用namespace关键字定义了一个命名空间mycompany

//其中包含一个名为func的函数

namespace mycompany

{

      void func()

      {

            printf("hello,this is my comany");

      }

};

//代码使用namespace关键字定义了另一个命名空间yourcompany

//其中也包含一个名为func的函数

namespace yourcompany

{

      void func()

      {

            printf("hello,this is your comany");

      }

};

//在main函数中,通过使用using namespace mycompany;语句,

//代码引入了mycompany命名空间,使得命名空间中的符号(包括函数func)

//在main函数中可见

using namespace mycompany;

//系统通过将命令参数传给main 函数中argv参数保存参数值,argc是记录argv、//中保存命令参数的个数用的, 所以argc是int型参argv是字符串型数组参数。

//main函数是一个程序的入口函数。但是,只要函数运行,就一定会被人调用。//而main函数则是被系统自动调用

int main(int argc,char* argv[])

{

      //码调用func()函数,这里的func()调用实际上是调用了mycompany命名空间中的func()函数

      //因为之前使用了using namespace mycompany;语句

      func();

      printf("\n");

      //使用yourcompany::func()语法调用了yourcompany命名空间中的func()函数,

      //这样就打印输出了"hello, this is your company"

      yourcompany::func();

      printf("\n");

      return  0;

     

}

1.4 习题 

1. STL 中算法中,大量使用的技术是(  )

  A. 继承   B. 虚函数     C. 模板   D. 封装

2、下列的模板说明中,正确的是( )。

A、template<class T1,T2>;

B、template<typename T1,typename T2>;

C、template<class T1 ; class T2>;

D、template<typename T1,T2>

A D中的 template<class T1, T2>;错误,因为模板参数列表中的每个参数都需要使用关键字 class 或 typename 进行声明

C 中的 template<class T1; class T2>; 也是错误的,因为在模板参数列表中的每个参数声明之间不需要分号

3.若定义如下函数模板:

Template<typename T>

Max(T a,T b,T &c)

{

  c=a+b;

}

则下列M ax()函数模板能够调用成功的选项是(B )。

A.int x,y;char z;M ax(x,y,z);

B.double x,y,z;M ax(x,y,z);//三个参数的类型必须相同

4.Stl常用的数据结构不包过

   A.栈 B.列表 C.队列 D.图

5.stl主要包括 容器,算法,迭代器三大部分,其中容器分为序列性容器关联性容器容器适配器三类。Stl容器包含了绝大多数数据结构,如:数组,链表,队列,堆,栈,树等。

6.一个动态模板类,把与内存管理的部分进一步抽象,编译成代码,实现了内存的动态分配和释放

7.动态数组模板类体现了STL容器关于内存“动态分配,销毁,再分配的思想

8.(判断题)“using namespace std”属于名字空间域的运用 答案:正确

9.模板:函数模板和类模板

非函数模板转化为函数模板:增加一行模板参数声明template<class T>,再将所有的int用T代替

10.什么是stl?

STL是标准模板库(Standard template library),STL包含容器、算法、迭代器三大部分

STL容器包含了绝大多数数据结构,如数组、链表、队列、堆、栈、树等 。

STL算法包含了诸如增、删、改、查、排序等系统函数 。

STL迭代器类似指针一样,通过它的有序移动,把容器中的元素与算法关联起来,它是实现所有STL功能的基础所在。

11.算法、迭代器与容器的关系:

  算法是通过迭代器操作容器。每个容器都有相应的迭代器,容器通过迭代器共享某一具体算法,某一具体算法不依附于某一具体容器,迭代器起到一个中间媒介作用,把容器和算法连接起来。迭代器思维是编制通过泛型算法发展的必然结果,算法通过迭代器依次访问容器中的元素。容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。

算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。

迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。

12.STL与模板的关系:

模板分两种类型:函数模板和类模板。函数模板提供编译代码过程中 的文本替换功能;类模板可以编写通用的、类型安全的类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值