1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 | list容器: 头文件:#include <list> 是一个功能齐全的双向链表 支持的运算符: == != <= >= < > 按照strcmp的比较规则进行比较 注意:元素必须支持 == 或者 < 运算符,如果不支持则需要重载 == 或者 < 运算符函数 注意: == != 调用 ==函数,> < >= <= 调用 <函数,重载时必须实现为常函数 常用的成员函数: 构造函数: list( size_type num, const TYPE& val = TYPE() ); 功能:创建链表时添加num个值为val的元素 list( input_iterator start, input_iterator end ); 功能:使用已有的数组初始化链表 start:已有数组的第一个元素的指针或迭代器 end:最后一个元素的下一个位置的指针或迭代器 void assign( size_type num, const TYPE& val ); 功能:给链表赋值num个值为val的数据 void assign( input_iterator start, input_iterator end ); 功能:给链表赋值一组已有的数据 TYPE& back(); 功能:返回链表中的最后一个元素 TYPE& front(); 功能:返回链表中的第一个元素 iterator begin(); 功能:返回一个正向迭代器,指向链表中的第一个元素 const_iterator begin() const; 功能:返回一个正向常迭代器,指向链表中的第一个元素 reverse_iterator rbegin(); 功能:返回一个逆向迭代器,指向链表的最后一个元素 const_reverse_iterator rbegin() const; 功能:返回一个逆向常迭代器,指向链表的最后一个元素 iterator end(); 功能:返回一个正向迭代器,指向链表中的最后一个元素的下一个位置 const_iterator end() const; 功能:返回一个正向常迭代器,指向链表中的最后一个元素的下一个位置 reverse_iterator rend(); 功能:返回一个逆向迭代器,指向链表中的第一个元素的前一个位置 const_reverse_iterator rend() const; 功能:返回一个逆向常迭代器,指向链表中的第一个元素的前一个位置 iterator erase( iterator loc ); 功能:删除链表中某个位置元素,位置以迭代器方式提供 iterator erase( iterator start, iterator end ); 功能:删除链表中某范围的元素,范围以迭代器方式提供 [start,end) 注意:list的迭代器不支持 it+n it+=n 这类运算,因为list是不支持随机访问的,只能自变++\-- iterator insert( iterator loc, const TYPE& val ); 功能:在链表指定位置前,插入一个值为val的元素,位置以迭代器方式提供 void insert( iterator loc, size_type num, const TYPE& val ); 功能:在链表指定位置前,插入num个值为val的元素,位置以迭代器方式提供 template<TYPE> void insert( iterator loc, input_iterator start,input_iterator end ); 功能:在链表指定位置前,插入一组元素,位置以迭代器方式提供 void merge( list &lst ); 功能:按照顺序合并两个链表,前提是合并之前必须各自有序,否则需要先各自排序,再合并才能是有序的 void merge( list &lst, BinPred compfunction ); 功能:按照顺序合并两个链表,结果也是有序的,如果链表的元素不支持 < 运算符,则需要提供元素的比较函数 注意:合并后 lst 的元素就都没了 void pop_back(); 功能:尾删除 void pop_front(); 功能:头删除 void push_back( const TYPE& val ); 功能:尾添加 void push_front( const TYPE& val ); 功能:头添加 void remove( const TYPE &val ); 功能:按照删除值为val的所有元素 void remove_if( UnPred pr ); 功能:删除符合条件的元素 pr: bool func_if(int num) { return num < right && num > left; // 条件 } void resize( size_type num, const TYPE& val = TYPE() ); 功能:修改链表的元素个数 注意:可以往大了改,相当于增加元素,增加的元素的值是val 也可以往小了改,相当于删除元素 void reverse(); 功能:链表逆序 void sort(); void sort( BinPred p ); 功能:对链表元素进行快速排序,需要支持 < 运算,否则需要回调比较函数 p: bool cmp(T a,T b) { return a < b; } void splice( iterator pos, list& lst ); 功能:把链表lst剪切到当前链表的指定位置前面,位置以迭代器方式提供,lst也会删除所有元素 void splice( iterator pos, list& lst, iterator del ); 功能:把链表lst指定位置del的元素,剪切到当前链表的指定位置前面,位置以迭代器方式提供,lst中的del也会被删除 void splice( iterator pos, list& lst, iterator start,iterator end ); 功能:把链表lst指定范围[start,end)的元素,剪切到当前链表的指定位置前面,位置以迭代器方式提供,lst中的[start,end)的元素也会被删除 void unique(); 功能:删除链表中重复的元素 void unique( BinPred pr ); 注意:如果链表中的元素不支持==运算符,则需要提供回调比较相等的函数 pr: bool cmp(T a,T b) { return a == b; } queue队列容器: 头文件:#include <queue> 链式队列 不支持运算符,没有迭代器,只有无参构造、拷贝构造 push 队尾入队 pop 队头出队 front 获取队头元素 back 获取队尾元素 empty 判断是否队空 size 获取队列元素个数 stack栈容器: 头文件:#include <stack> 链式栈 不支持运算符,没有迭代器,只有无参构造、拷贝构造 push 入栈 pop 出栈 top 获取栈顶元素 empty 判断是否栈空 size 获取栈中元素个数 priority_queue优先队列容器: 头文件:#include <queue> 优先队列,该队列会对入队的数据进行排序,元素越大,优先级越高,优先出队 注意:存储的元素必须满足 < 运算符,否则需要重载才能入队 push 入队 注意:入队后的元素会按从大到小顺序排列优先级 pop 出队 优先级最高的先出队 top 获取队头元素 empty 判断是否队空 size 获取队中元素个数 deque双端队列容器: 头文件:#include <deque> 双端队列容器,用法与vector几乎一模一样,底层采用双向链表存储数据,本来是不支持随机访问的,但是底层重载了[]运算符函数,还是通过遍历来访问元素,只是使用[]时感觉像随机访问而已 因为vector是顺序表,deque是链式表,deque更节约内存,但是速度上vector更快 其实就是在vector的基础上增加了两端管理的功能,但是已经脱离了队列的限制 支持的运算符: == != > < >= <= [] 使用规则与vector set容器: 头文件:#include <set> 集合容器,特点是元素不能重复,还会对元素自动排序,因此存储的元素必须支持 == 运算符、 < 运算符,否则需要重载,是链式结构,只能使用迭代器遍历 构造函数:只有无参构造、拷贝构造 支持的运算符:与list一样 成员函数: iterator begin(); 功能:返回一个正向迭代器,指向set中的第一个元素 const_iterator begin() const; 功能:返回一个正向常迭代器,指向set中的第一个元素 void clear(); 功能:清空set所有元素 size_type count( const key_type& key ); 功能:获取集合中key元素的数量,结果只能是0或1,可用于判断key是否存在,在此容器中意义不大 iterator insert( iterator i, const TYPE& val ); 功能:向集合中添加一个元素 void insert( input_iterator start, input_iterator end ); 功能:向集合中添加一组元素 pair<iterator,bool> insert( const TYPE& val ); 功能:向集合中添加一个元素 例子: pair<set<int>::iterator,bool> p = s.insert(num); cout << *p.first << " " << p.second << endl; 返回值可以不接,p.first表示num加入set后的位置 p.second 表示num加入是否成功 iterator find( const key_type& key ); 功能:查找集合中值为key的元素,并返回该元素的迭代器,找不到返回end pair<iterator, iterator> equal_range( const key_type& key ); 功能:查找集合中所有值为key的元素,并返回一个迭代器范围,在此容器中毫无意义 key_compare key_comp() const; 功能:返回一个用于元素间值比较的函数对象 value_compare value_comp() const; 功能:返回一个用于元素间值比较的函数对象,此容器中与key_comp功能一样 iterator lower_bound( const key_type& key ); 功能:返回一个指向大于或者等于key值的第一个元素的迭代器(>=key的最小值) iterator upper_bound( const key_type& key ); 功能:在当前集合中返回第一个指向大于Key值的元素的迭代器。 multiset容器: 头文件:#include <set> 多元集合容器,特点是元素可以重复,会对元素自动排序,因此存储的元素必须支持<运算符,只能通过迭代器遍历 size_type count( const key_type& key ); 功能:获取值为key的元素的数量,在此容器中更有意义 pair<iterator, iterator> equal_range( const key_type& key ); 功能:查找集合中所有值为key的元素,并返回一个迭代器范围,在此容器中有意义 |
STL模板库
最新推荐文章于 2024-07-15 13:32:43 发布