C++ STL标准库与泛型编程

 STL概述

        C++标准库中包含STL(即STL+一些小东西),STL提供了一组通用的算法和数据结构。它包括向量、链表、映射等容器,以及用于排序、搜索和操作这些容器的算法。

header    
  • C++标准库的 header files 不带 .h,例如:#include<vector>
  • 新式 C header files 不带 .h,例如:#include<cstdio>
  • 老式 C header files 带 .h 仍然可用,例如:#include<stdio.h>
STL 六大部件

C++标准模板库Standard Template 最重要的六大部件(Components):容器算法仿函数迭代器适配器分配器

  • 容器:容器提供了不同的数据结构,用于存储和管理数据。
  • 分配器:分配器用于管理内存的分配和释放。
  • 算法::STL提供了一系列的算法,如排序、查找、复制、删除等。
  • 迭代器:迭代器是STL中用于遍历容器元素的对象。
  • 仿函数:STL中的仿函数是一种可调用对象,类似于函数指针。它们可以被用作算法的参数,用于定义算法的操作。
  • 适配器:适配器是一种用于改变容器接口的对象。

使用例子: 

#include <iostream>
#include <vector>
#include <functional>

using namespace std;//打开std这个命名空间

int main()
{
	int ia[6] = { 27, 210, 12, 47, 109, 83 };

	//vector 为容器 ,allocator为分配器,可以不写
	vector<int, allocator<int>> vi(ia, ia + 6);

	//connt_if 为算法, vi.begin() 和 vi.end()为迭代器
	cout << count_if(vi.begin(), vi.end(), 
		not1(bind2nd(less<int>(),40)));
	//not1 和 bind2nd 为仿函数适配器,less为仿函数

	return 0;

}
 容器(Containers)
  • 序列容器    array、vector、deque、forward-list
  • 关联容器    set、multiset、map、multimap

Unordered容器也属于关联容器,由hash-table实现

分配器(allocators)
  • 容器需要一个东西来支持它对内存的使用,这个东西就是分配器,最好的情况下,我们不需要知道这个东西,所以需要一个默认的分配器。如果不指定分配器,就会使用默认分配器。

C++层面用operator new() ,C 层面用malloc()

  • allocator只是以::opreator new ::opreator delete 完成 allocate()deallocate(),没有任何特殊设计;
  • allocate()会调用malloc()
  • deallocate()调用free()

我们需要的size青色部分空间的大小,但是malloc会在青色部分外包裹其他东西。因此,会产生一些额外开销(如果要分配的区块小,那么额外开销就相对较大,不能忍受)

 16条链表,负责不同大小的内存分配。8字节对齐(1-128)。每个内存块不会都带cookie。只会在链表的头尾有cookie。--------   templete <class T, class Alloc = alloc>

 

有以下分配器(不在标准库)

array_allocator
__mt_allocator //多线程
debug_allocator
__pool_allocator//内存池
bitmap_allocator
malloc_allocator
new_allocator

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值