[C++][STL]STL中的事务安全(transaction safe)

transaction safe即commit-or-rollback,在数据库里很常见。

如果一个操作是事务安全的,即表示:在执行操作时发生意外导致操作没有完成,该操作所有已经完成的修改均会自动撤销。

在C++中,上文所述的“意外”是指异常,如果一个操作不会抛出异常,那么它是永远“成功执行”的(设计者这么看,使用不当会发生不可预期后果),这样的操作不涉及事务安全。

STL在guarantee和性能之间更倾向于后者,不完全保证事务安全。

 

STL容器分为两类

node-based: 以指针连接各节点。

  有以下容器:list, set, multiset, map, multimap

  不涉及事务安全:销毁删除节点(单节点+多节点),销毁对象

  保证事务安全:插入节点(单节点)

  不保证事务安全:插入节点(多节点),但对list除外

 

  list是特殊的,它几乎保证所有操作的事务安全:remove(), remove_if(), merge(), sort(), unique()

 

array-based: 各节点在内存中连续存储

  有以下容器:vector, deque

  不涉及事务安全:销毁删除节点(单节点+多节点),销毁对象

  保证事务安全:端点处的插入、取出(自然是单节点),修改节点(单节点)

  不保证事务安全:其他位置的插入、取出(单节点+多借点)

转载于:https://www.cnblogs.com/SelaSelah/archive/2012/04/23/2466162.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值