侯捷-STL与泛型编程笔记(第一讲、容器概述——0.概述)

一、简介

C++ 标准库(STL大部分属于C++标准库) —STL和标准库的关系
STL 标准模板库

  • 标准库以header files形式呈现
    • C++标准库的header files不带副档名,如:#include
    • 新式C header files,如:#include
    • 旧式C header files,如:include<stdio.h>

新式headers内组件封装在namespace “std”(新式统一规定都在std)
using namespace std;(全部加载)
using std::cout;(cout单个)

网站:

书:

  • THE C++ STANDARD LIBRARY第二版
  • stl源码剖析(侯捷)

程序=数据结构+算法

二、STL六大部件(components)

容器(Containers):容器存储数据
分配器(Allocators):分配器为容器分配内存
算法(Algorithms):算法处理容器的数据
迭代器(Iterators):迭代器为算法提供访问容器的方式
适配器(Adapters):仿函数适配器为仿函数使用算法提供支持
仿函式(Functors):仿函数为类似不同的类相加减提供支持

联系

//一个例子说明六大部件
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>
using namespace std;

int main()
{
	int ia[6] = {27, 210, 12, 47, 109, 83};
	vector<int, allocator<int>> vi(va,ia + 6);//<>符号表示模板,allocator<int>是一个分配器模板,一般vector都会自动默认使用分配器
	
	cout << count_if(vi.begin(), vi.end(),
			not1(bind2nd(less<int>(), 40)));
	return 0;
}
//vector是一个容器containers
//count_if是一个算法algorithm,计算vi里面的个数
//vi.begin(), vi.end()是一个迭代器iterator
//less<int>是一个仿函数function
//bind2nd是一个适配器function adapter,绑定第二个参数为40
//notl是一个适配器function adapter,表示否定
//整个表达,vi大于等于40的个数

1.容器

容器规定:“前闭后开”区间(涵盖第一个不涵盖最后一个)
[)
在这里插入图片描述

旧版遍历:
Container<T> c;
...
Container<T>::iterator ite = c.begin();
for (; ite != c.end(); ++ite)
	...

C++11遍历:
range-based for statement
for (int i: {2,3,4,5,6,7,8,9,10})
{
	std::cout << i << std::endl;
}

std::vector<double> vec;
...
for (auto elem : vec) {
	std::cout << elem << std::endl;
}

for (auto& elem : vec) {
	elem *= 3; // elem = elem * 3
}
  • 容器种类
  • 顺序容器Sequence Containers
    • Array(固定元素个数)C++11
    • Vector(尾部个数可以扩充)
    • Deque(头尾个数可以扩充)
    • List(双向链表)
    • Forward-List(单向链表)C++11
  • 关联容器Associative Containers
    • Set/Multiset(key=value)
    • Map/Multimap(key对应value;multimap允许重复元素,map不允许有重复)
  • 不定序容器Unordered Containers(属于关联容器)
    HashTable Separate chaining(不定序容器使用hashtable):同放一个内存,内存放这几个数据的链表
    在这里插入图片描述

下一节,从内存大小,存储方式,查找时间比对各个容器

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值