c++标准库之简介-01

基础知识介绍

c++标准库介绍
什么是c++标准库?标准库和STL有什么区别?

  1. c++的标准库是下载编译器是自带的,是属于c++标准的一部分,本质上是一个库,它和什么三方库,开源库,没有本质上的区别;唯一的区别就是它被冠以了标准之名,设计目标在于通用,并且有专家们来维护。
  2. STL是标准库的一部分,STL和另外一些组件(比如IO)构成了标准库。

命名空间
命名空间,就是把一些函数组件放到一个地方,如果要使用它,就会选中把它们拿出来。例如

using namespace std;//就是使用std这个命名空间,然后可以使用这个空间里面的函数

当然,如果你仅仅使用一个函数组件,没必要把所有的函数组件都放出来,你可以使用下面这种方式

using std::cout;//这里我仅仅把cout放出来使用

STL基础知识介绍

STL包含哪些东西?
它包含了六大组件

  • 容器(Containers)
  • 分配器(Allocators)
  • 算法(Algorithm)
  • 迭代器(Iterators)
  • 适配器(Adapters)
  • 仿函数(Functors)
  1. 容器(Containers):STL提供了多种容器,如vector、list、set、map等,这些容器可以存储不同类型的数据,并提供了不同的访问方式和操作方法,可以满足各种需求。

  2. 迭代器(Iterators):STL中的迭代器提供了一种通用的访问容器中元素的方式,可以遍历容器中的元素,也可以进行元素的增删改查等操作。

  3. 算法(Algorithms):STL提供了多种算法,如排序、查找、复制、移动等,这些算法可以直接应用于STL容器中的元素,提高了程序的效率和可维护性。

  4. 函数对象(Function Objects):STL中的函数对象是一种可调用对象,可以像函数一样使用,可以作为算法的参数传递,也可以作为容器的元素存储。

  5. 适配器(Adapters):STL提供了多种适配器,如迭代器适配器、容器适配器等,可以将已有的容器或迭代器进行适配,以满足不同的需求。

  6. 分配器(Allocators):STL中的分配器提供了一种通用的内存分配方式,可以为容器中的元素分配内存,也可以自定义分配器,以满足不同的需求。

这六大组件之间相互关联,容器可以使用迭代器进行元素的访问,算法可以直接应用于容器中的元素,函数对象可以作为算法的参数传递,适配器可以将已有的容器或迭代器进行适配,分配器可以为容器中的元素分配内存。这些组件共同构成了STL的基础框架。
下面看一个例子

#include 
#include 
#include 
#include 

using namespace std;

int main()
{
  int ia[6] = {27,210,12,47,109,83};
  //vector是使用容器vector,allocator则是分配内存,可以不写,
  //有默认的选项,这里面<>表示一个模板
  vector<int,allocator<int>> vi(ia,ia+6);
  //count_if是一个算法,统计容器内满足条件的值的数量
  //vi.begin(),vi.end()则是迭代器,遍历容器内的数值 
  cout<< count_if(vi.begin(),vi.end(),
          not1(bind2nd(less<int>(),40)));
  //bind2nd:适配器。绑定第二参数,让less这个函数的第二参数锁定为40,
  
  return 0;
}

具体解释如下
这段代码使用了STL库中的算法和函数对象,目的是统计一个vector中有多少个元素大于等于40。

具体解释如下:

  1. 首先定义了一个数组ia,包含6个整数。

  2. 然后使用数组ia的首地址和尾地址初始化了一个vector对象vi。

  3. 接下来使用STL库中的count_if算法,统计满足条件的元素个数。count_if函数的参数包括三个:第一个是需要进行统计的容器的起始迭代器,第二个是需要进行统计的容器的结束迭代器,第三个是一个函数对象,用于判断元素是否满足条件。

  4. 在本例中,第三个参数使用了STL库中的not1和bind2nd函数对象。not1函数对象是一个逻辑非函数对象,用于对另一个函数对象的返回值进行逻辑非运算。**bind2nd函数对象则是一个绑定第二个参数的函数对象,它将一个二元函数对象转换成一个一元函数对象,其中第二个参数被绑定为指定的值。**在本例中,less()是一个二元函数对象,用于比较两个整数的大小,而bind2nd(less(),40)则是将less()函数对象的第二个参数绑定为40,得到一个只需要一个整数参数的函数对象,用于比较一个整数是否小于40。

  5. 因此,not1(bind2nd(less(),40))就是一个只需要一个整数参数的逻辑非函数对象,用于判断一个整数是否大于等于40。

  6. 最后,count_if函数返回满足条件的元素个数,即大于等于40的元素个数。

你可能感兴趣的:(C++,c++,开发语言,算法)