《C++ Primer》---第二部分:容器和算法

第九章 顺序容器

1.容器的定义

顺序容器对应数据结构中的线性结构,在STL中,vector、list、deque作为基础容器,都是已经实现了,stack、queue、priority_queue则是作为适配器,即关联一个基础容器来实现自己的功能

容器中元素的初始化和整个容器的内存分配不是同步的

容器只是一个类型元素的集合,在数组的基础上加入了一些控制,使得比数组更易使用,对于基本类型,使用时候没有什么要考虑的,对于类类型,要考虑初始化时候它的构造函数是否需要参数。

2.迭代器

不同的容器类型会有不同的迭代器构造,如vector就是原生态指针,list就是结构体指针,在该结构体指针上重载++,--等操作

对于迭代器的范围,设计者参照哨兵模式,第一个迭代器begin指向容器开始的地方,第二个迭代器end指向一个哨兵,当begin==end的时候表示迭代器遍历完成, 这样设计的好处就是当容器为空时,能使判断标准保持一致;如果设计成当begin>end时候表示遍历结束,也可以,但是要改变begin和end的初始值,end指向begin的前一个位置,这样设计不太美观

当进行删除或插入操作时, 可能会造成容器失效

3.容器的操作

按照STL规范,c++的容器操作都应该基于迭代器的,迭代器类型在容器内部定义,迭代器是链接容器和泛型算法的桥梁

容器的插入操作都是插入在指定迭代器之前,所以如果要在容器末尾插入元素,需要调用push_back(T)

vector和deque重载了下标操作符,可以利用c[n]来访问元素

swap操作用来交换两个容器的内容,由于该操作只是更改指针指向,所以速度很快



第十章 关联容器

STL库定义了一个pair类型,有两个元素first和second,分别表示key和value

1.定义

关联容器不能以容器大小作为参数进行初始化,因为这样无法知道初始化的键对应的什么值

关联容器保存的只是一些键值对,并希望能够很快的查找这些键所对应的值,对键值对的存储前后关系不关心,所有没有push_front和push_back等操作提供给用户

2.操作

关联容器的所有操作也是基于迭代器的,对于插入操作,迭代器没有像序列容器那样可以代表被操作关联容器某个位置,这里的迭代器主要是用来获取内容,例如:

vector<int> c;
c.insert(iter, T);//在iter所指向的位置之前插入T

map<int, int> m;
m.inset(b,e);//插入迭代器b至e之间的所有pair类型元素
m.inset(p);//插入指定的pair类型元素

关联容器的重点在“关联”,关键是能通过key找到value
但是有时也需要排序操作:
如果是按照key排序,如果是c++,在map初始化时候可以重载key的“operator <()"或传入比较函数,如果是java,可以对map对象传入比较函数。
如果是按照value排序,可以把map中的pair传入一个vector,指定vector按value排序,最后得到一个排好序的vector

容器类型也重载了下标运算符,可以使用m[key] = value;//如果key在map中不存在,则插入



第十一章 泛型算法

整个泛型算法都是以迭代器为基础,以迭代器作为基本参数输入,可能带有谓词函数,可能以迭代器作为输出, 其中如果输出end,则表示操作未成功,如find函数

1.谓词函数

谓词函数是返回布尔类型的函数,用来重写算法中的某步判断

sort(beg, end);
sort(beg, end, comp);//comp重写了排序算法中的两元素的比较判断

find(beg, end, val);
find(beg, end, pred);//pred重写了查找元素时候的查找标准

2.迭代器
  • 插入迭代器(如inserter):用在泛型算法中,与某个容器绑定,实行指定位置的插入
  • iostream迭代器:与输入输出流绑定,迭代遍历所关联的IO流
  • 反向迭代器:反向遍历容器,例如:想利用sort进行降序排序但是不想使用谓词函数时候
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值