设为首页 加入收藏

TOP

C++ Standard Library(二)
2016-04-23 14:09:08 】 浏览:651
Tags:Standard Library
供的异常类,用new分配一块内存时,大小超出了实现所定义的大小限制时,
会抛出该异常。
bad_weak_ptr:定义在头文件 ,c++11开始支持。当由std::weak_ptr转换为std::share_ptr,而std::weak_ptr
所指向的对象已经删除了,会抛出该异常。
bad_function_call:定义在头文件 ,c++11开始支持。当函数对象为空对象时,调用该对象,由
std::function::operator()抛出该异常。

Callable

Callable类型是可以触发某些操作的类型,定义在std::function, std::bind, std::thread::thread,一个Callable对象可以是
一个函数对象,指向函数的指针,函数的引用,指向成员函数的指针,或者是指向数据成员的指针。

Utilities

template struct pair; ( )
template class tuple; ( )
template > class unique_ptr; ( )
template class unique_ptr ( )
template class shared_ptr; ( )
template class weak_ptr; ( )
注意在某一时刻只能有一组shared pointers拥有某个对象,也就是说不能改对象构造多个shared_ptr对象,
只能用该对象的shared_ptr对象去构造新的shared_ptr对象。
template class enable_shared_from_this; ( )
template struct default_delete; ( )
template struct default_delete ; ( )
基本数据类型的最小大小:char 1, short int 2, int 2, long int 4, long long int 8, float 4, double 8, long double 8;
template class numeric_limits; ( )
注意c++11新增的头文件 提供的编译时类型信息。
template typename std::add_rvalue_reference ::type declval()
引用包装器:reference_wrapper (
函数包装器:function(
中提供了很多只读序列的操作,可写序列的操作,分割操作,排序操作,二分查找操作,集合操作,堆操作,求最大最小值操作。
注意,remove并没有实际删除元素,只是将迭代器的指针向前移动来跳过remove的元素,所以原容器的大小并没改变,remove将返回新的尾部迭代器。
c++11提供了编译时的分数算术运算
c++11提供了新的时钟标准库

The Standard Template Library

容器(containers) 迭代器(iterators) 算法(algortithms)
STL将数据与对数据的操作相分离,数据由容器来管理,操作由算法来完成,通过迭代器来连接算法与容器。

STL容器分类:
序列容器:array,vector,deque,list,forward_list。通常由数组与链表实现。
关联容器:set, multiset, map, multimap。通常由平衡二叉树实现。
无序关联容器:unordered_set, unordered_multiset, unordered_map, unordered_multimap。通常由哈希表实现。
容器适配器:stack,queue,priority_queue。

STL迭代器分类:
ForwardIterator, BidirectionalIterator, RandomAccessIterator
InputIterator(只能前向迭代), OutputIterator(只能前向迭代)

迭代器分类 功能 提供该迭代器的类、函数或数据结构
OutputIterator 前向写 ostream,inserter
InputIterator 一次前向读 istream
ForwardIterator 前向读 forward_list, unordered associative containers
BidirectionalIterator 双向读 list,associative containers
RandomAccessIterator 随机读 array,vector,deque,string,C-style array

流迭代器:
istream_iterator
ostream_iterator
istreambuf_iterator
ostreambuf_iterator

迭代器适配器:

reverse_iterator 逆序遍历
move_iterator 解引用转换右值引用
insert_iterator 插入到容器
back_insert_iterator 插入到容器尾
front_insert_iterator 插入到容器头
函数
make_reverse_iterator 创建一个reverse_iterator
make_move_iterator 创建一个move_iterator
front_inserter 创建一个front_insert_iterator
back_inserter 创建一个back_insert_iterator
inserter 创建一个insert_iterator

作为容器的元素必须满足以下三个要素:
该元素可拷贝或移动;该元素可赋值;该元素能够被销毁;

注意c++标准模板库仅支持值语义。

注意vector重分配空间后,对原来vector中的元素的引用,指针,和迭代器将会无效。
注意vector特化了一个vector 版本,更加节省空间。

deque的内部实现,可能是使用了多个内存块,一些用于前向增长,一些用于逆向增长。

注意list的splice成员函数,是在指定的位置的前面插入元素的。

注意自定义关联容器的排序规则时,需要满足严格弱序化(需要区分小于还是等于), 即:
- 反对称性,若果x < y,那么y < x;
- 传递性,若果x < y且y < z, 那么x < z;
- 反自反性,x < x的比较结果是false;
- 相等的传递性,如果!(a < b) && !(b < a)是true, 且!( b < c) && !(c < b)是true,那么!(a < c) && !(c < a)是true;

函数对象,即在类中重载了operator ()

输入输出流:
istream: 输入流读数据,类模板basic_istream的实例化
ostream: 输出流写数据,类模板basic_ostream的实例化
全局流对象:cin,cout,cerr,clog
流继承关系,如下图

流继承关系

其它的功能,在遇到的时候再参考帮助文档与其他资料学习。

参考
1. 《The C++ Standard Library 2nd edition》,Nicolai M.Josuttis.
2. cppreference

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇BestCoder Round #81 (div.2) 100.. 下一篇BestCoder Round #81 (div.2) 100..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目