1581
备注:
|
4234
|
删除的内容标记成这样。 | 加入的内容标记成这样。 |
行号 7: | 行号 7: |
行号 9: | 行号 10: |
除此以外还有: * 特殊的容器:string(字符串), array(C语言原始数组) * 容器适配器:stack(栈), queue(队列), priority_queue(优先队列) |
除此以外还有: * 特殊的容器:string(字符串), array(C语言原始数组) * 容器适配器:stack(栈), queue(队列), priority_queue(优先队列) |
行号 13: | 行号 16: |
容器一般使用模板类来实现 |
|
行号 16: | 行号 21: |
行号 20: | 行号 26: |
* 输出跌代子 | * 输出跌代子 |
行号 22: | 行号 29: |
* 跌代子适配器(back_inserter, front_inserter, inserter, 反向迭代子,ostream_iterator, istream_iterator) | * 跌代子适配器:将原来不是迭代子的东西变成迭代子,或者将一种迭代子变成另一种迭代子(比如back_inserter, front_inserter, inserter, 反向迭代子,ostream_iterator, istream_iterator) == 算法algorithm == 算法是用来处理容器内的元素的一些操作,比如搜索、排序、拷贝、修改等。算法一般使用函数模板来实现。 == 仿函数functor == 用法类似函数的对象。用重载了operator()的类或者模板类来实现 = vector向量 = == 接口说明 == vector的用法类似于数组,不同的是数组空间可以动态分配。 {{{ #!cplusplus #include <vector> namespace std { template< class T, class Allocator = allocator<T> > vector; } }}} T可以是任何类型,但是必须满足:assignable, copyable === 构造方法 === {{{ #!cplusplus vector< int > a2(10); //构造10个元素的vector vector< int > a3(10, 5); //构造一个10个元素的vector,每个元素都是5 vector< int > a4(a2); //构造一个vector与a2完全一样 vector< int > a1; // 构造一个空的vector int values[] = {10, 11, 12, 13, 14}; vector< int > a5( values, values+5); //通过迭代子来构造vector }}} === 不变操作和赋值 === {{{ #!cplusplus a1.size( ) //取容器内元素的个数 a1.empty( ) //判断容器是否为空 a1 == a2 //判断两个容器的内容是否相同, 还有!=, <, >, <=, >= a1 = a2 //将a2全部元素赋给a1 a1.assign( values, values+5 ) //将values[0]到values[4]赋给a1 a1.assign( 10, 5) //给a1赋值10个5 }}} === 元素访问 === {{{ #!cplusplus a1[ 5 ] //取第5个元素,下标从0开始 a1.at(5) //取第5个元素,带边界检查 a1.front() //取第0个元素 a1.end() //取最后一个元素 }}} === 跌代子 === {{{ #!cplusplus a1.begin() //随机跌代子,指向a1[0] a1.end() //随机跌代子,指向最后一个的下一个 a1.rbegin() //随机跌代子,指向最后一个 a1.rend() //随机跌代子,指向a1[0]的前一个 }}} === 插入删除操作 === {{{ #!cplusplus a1.insert( a1.begin(), 5); //在a1的最前面插入一个5 a1.insert(a1.end(), 10, 6); //在a1的最后面插入10个6 a1.insert(a1.begin(), values, values+5) //在a1的最前面插入values[0]到values[4] a1.push_back( 5 ) //在a1的最后面插入一个5 a1.pop_back( ) // 删除a1的最后一个元素 a1.erase( a1.begin() ) //删除a1中的第一个元素 a1.erase( a1.begin(), a1.begin() +2) //删除a1最前面2个元素 a1.resize( 10 ) //将a1元素个数改为10,增加的部分值为默认构造 a1.resize( 10, 6) //将a1元素个数改为10,增加的部分值为6 a1.clear() //清除所有元素 }}} |
STL概述
STL是Standard Template Library的缩写,是C++标准库中最强大、最复杂、最有用的部分。STL主要由容器(container)、跌代子(iterator)、算法(algorithm)所组成。还有仿函数(functor)、适配器(adapter)、配置器(allocator)等辅助组件。
1. 容器container
容器是存放和管理数据元素的数据结构,分为两大类:顺序容器(sequence container)和关联容器(associative container)。
- 顺序容器有:vector(向量,酷似数组), deque(双端队列), list(双链表)
- 关联容器有:map(字典), set(集合), multi_map(允许重复键的字典), multi_set(允许重复键的集合)
除此以外还有:
- 特殊的容器:string(字符串), array(C语言原始数组)
- 容器适配器:stack(栈), queue(队列), priority_queue(优先队列)
- 内部容器:不提供给用户使用,只用来实现其他容器,比如红黑树(用来实现map,set),堆(用来实现priority_queue)
容器一般使用模板类来实现
2. 跌代子iterator
跌代子是用来访问容器内元素的对象,类似指针。 跌代子根据能力的不同,分为:
- 随机跌代子(vector、deque的迭代子)
- 双向跌代子(list的迭代子)
- 单向跌代子
- 输入跌代子
- 输出跌代子
另外还有
- 跌代子适配器:将原来不是迭代子的东西变成迭代子,或者将一种迭代子变成另一种迭代子(比如back_inserter, front_inserter, inserter, 反向迭代子,ostream_iterator, istream_iterator)
3. 算法algorithm
算法是用来处理容器内的元素的一些操作,比如搜索、排序、拷贝、修改等。算法一般使用函数模板来实现。
4. 仿函数functor
用法类似函数的对象。用重载了operator()的类或者模板类来实现
vector向量
1. 接口说明
vector的用法类似于数组,不同的是数组空间可以动态分配。
T可以是任何类型,但是必须满足:assignable, copyable
1.1. 构造方法
1.2. 不变操作和赋值
1.3. 元素访问
1.4. 跌代子
1.5. 插入删除操作
1 a1.insert( a1.begin(), 5); //在a1的最前面插入一个5
2 a1.insert(a1.end(), 10, 6); //在a1的最后面插入10个6
3 a1.insert(a1.begin(), values, values+5) //在a1的最前面插入values[0]到values[4]
4 a1.push_back( 5 ) //在a1的最后面插入一个5
5 a1.pop_back( ) // 删除a1的最后一个元素
6 a1.erase( a1.begin() ) //删除a1中的第一个元素
7 a1.erase( a1.begin(), a1.begin() +2) //删除a1最前面2个元素
8 a1.resize( 10 ) //将a1元素个数改为10,增加的部分值为默认构造
9 a1.resize( 10, 6) //将a1元素个数改为10,增加的部分值为6
10 a1.clear() //清除所有元素
11