侯捷c++学习笔记

这篇博客是侯捷老师C++ STL学习的笔记,重点介绍了STL的组成部分,包括容器、分配器、算法、迭代器、适配器和仿函式。详细讲解了顺序性容器如vector、deque和list,以及关联性容器set、map和哈希表的特性,并提供了测试代码示例。
摘要由CSDN通过智能技术生成

c++ STL与内核分析 其一 各个容器的介绍



前言

本文是对侯捷老师的stl程序的学习笔记以及自己的一些体会。


一、STL的组成部分

1.容器(Container)
存放数据的地方

2.分配器(ALLocators)

3.算法(ALgorithms)
对容器中的存放的数据进行的一些操作

4.迭代器(Iterators)
是一组指针或者仿函数,对容器和算法的操作

5.适配器(Adapters)
仿函数或者是类,可以对迭代器,容器,进行改造,从而获得一些功能

6.仿函式(Functors)
六大部件的关系

二.容器

1.结构与分类

容器遵循前闭后开的准则,即begin指针指向第一个元素,end指针指向最后一个元素的下一个空间。


分类:
在这里插入图片描述

顺序性容器(Sequence containers)

特点:查找和排序不方便。

*array(数组)
使用时需指定大小。

测试:
*vector
前闭后开结构,当存放元素超过容器大小时,会两倍扩充容器大小并把原来的数据复制过去
*Deque
双向开放,内部实际上分段连续,内部有许多个分段的buffer用于存放元素,并有一个vector容器用于存放指向各个buffer的指针。当使用空间不足时,在内粗中寻找两倍与之前的空间并把原来的数据存放与新的容器中间。
在这里插入图片描述

*list(链表)
迭代器逐步移动,遍历操作比较耗时。

关联性容器 (Associated containers)

特点:容器内元素排序后存放在容器内,查找方便,由于元素存放时便已经排好序,故一般不提供sort方法。

*set/mutiset(集合):
*Map/multimap:

哈希表(hashtable)

各个容器的测试代码:

#include<iostream>
#include<cstdlib>
#include<ctime>
#include<array>
#include<deque>
#include<vector>
#include<forward_list>
#include<stack>
#include<map>
#include<set>
#include <algorithm>//使用find函数时或者stl自带算法需要附加头文件
using namespace std;
const long asize = 50000L;
//容器array(数组)的测试程序
//容器vector的测试程序
namespace jj01
{
   
string get_a_target_string()
{
   //函数作用,从键盘输入一个0~32768之间的数,并把它转化为string,创建一个对象
long target=0;
char buf[10];
	cout << "target (0~" << RAND_MAX << "): ";
	cin >> target;
	snprintf(buf, 10, "%d", target);
	return string(buf);
}
void test_array(){
   
    cout<<"testing array ...."<<endl;
    array<long, asize > a;//long是数据类型,asize是容器大小
    clock_t start =clock();
    
    for(long i = 0; i<asize ;++i)
    {
   
        a[i]=rand();
    }
    cout<<"milli-seconds: "<<(clock()-start)<<endl;
    cout<<"array.size "<<a.size()<<endl;
    cout<<"array.front "<<a.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值