因为机试需要用c++,暴风吸入式学习(套用)它的模板,发现还真的挺好用的,总结一下。时间紧急,取自各个网上的博客,没来得及仔细整理,都给了我很大帮助,有空了之后再慢慢梳理。这是向c++迈进的一大步!
C++ STL
vector
#include
-
vector v;
-
v.push_back(0);
-
v.pop_back(0);
-
v[0] v.at(0)
-
² vector.insert(pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置。
-
² vector.insert(pos,n,elem); //在pos位置插入n个elem数据,无返回值。
-
² vector.insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据,无返回值
-
assign()
-
begin()和end()
-
front()和back()
list
#include
- pop_back() 删除最后一个元素
- pop_front() 删除第一个元素
- push_back() 在list的末尾添加一个元素
- push_front() 在list的头部添加一个元素
- assign()
- reverse()
- merge()
- l1.insert(l1.begin(),100); 在l1的开始位置插入100。
- l1.insert(l1.begin(),2,200); 在l1的开始位置插入2个100。
- l1.insert(l1.begin(),l2.begin(),l2.end());在l1的开始位置插入l2的从开始到结束的所有位置的元素。
- l1.erase(l1.begin()); 将l1的第一个元素删除。
- l1.erase(l1.begin(),l1.end()); 将l1的从begin()到end()之间的元素删除。
- begin()和end()
- front()和back()
deque
#include
- push_back,push_front
- pop_back,pop_front 只删除,不返回
- [] at()
- erase()
- insert()
- begin()和end()
- front()和back()
stack
#include
(stack没有迭代器,所以除了顶部元素,无法存取其它元素,即不能遍历stack。用vector或者是deque来实现)
- top():返回一个栈顶元素的引用,类型为 T&。如果栈为空,返回值未定义。
- push(const T& obj):可以将对象副本压入栈顶。这是通过调用底层容器的 push_back() 函数完成的。
- push(T&& obj):以移动对象的方式将对象压入栈顶。这是通过调用底层容器的有右值引用参数的 push_back() 函数完成的。
- void pop():弹出栈顶元素。
- size():返回栈中元素的个数。
- empty():在栈中没有元素的情况下返回 true。
- emplace():用传入的参数调用构造函数,在栈顶生成对象。
- swap(stack & other_stack):将当前栈中的元素和参数中的元素交换。参数所包含元素的类型必须和当前栈的相同。对于 stack 对象有一个特例化的全局函数 swap() 可以使用。
queue
#include
(用deque实现)
- \1. push
- \2. pop
- \3. size
- \4. empty
- \5. front
- \6. back
set
#include
(实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构,在插入元素时,它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有节点的键值;另外,还得确保根节点的左子树的高度与右子树的高度相等,这样,二叉树的高度最小,从而检索速度最快。要注意的是,它不会重复插入相同键值的元素,而采取忽略处理。平衡二叉检索树的检索使用中序遍历算法)
- begin()–返回指向第一个元素的迭代器
- clear()–清除所有元素
- count()–返回某个值元素的个数 s.count(20)
- empty()–如果集合为空,返回true
- end()–返回指向最后一个元素的迭代器
- equal_range()–返回集合中与给定值相等的上下限的两个迭代器
- erase()–删除集合中的元素。删除的对象可以是某个迭代器位置上的元素、等于某键值的元素、一个区间上的元素和清空集合。
- find()–返回一个指向被查找到元素的迭代器。s.find(20) != s.end()
- get_allocator()–返回集合的分配器
- insert()–在集合中插入元素
- lower_bound()–返回指向大于(或等于)某值的第一个元素的迭代器
- key_comp()–返回一个用于元素间值比较的函数
- max_size()–返回集合能容纳的元素的最大限值
- rbegin()–返回指向集合中最后一个元素的反向迭代器
- rend()–返回指向集合中第一个元素的反向迭代器
- size()–集合中元素的数目
- swap()–交换两个集合变量
- upper_bound()–返回大于某个值元素的迭代器
- value_comp()–返回一个用于比较元素间的值的函数
multiset
#include
(multiset 容器和 set 容器有相同的成员函数,但是因为 multiset 可以保存重复元素,有些函数的表现会有些不同。和 set 容器中的成员函数表现不同的是:)
- insert() 总是可以成功执行。当插入单个元素时,返回的迭代器指向插入的元素。当插入一段元素时,返回的迭代器指向插入的最后一个元素。
- emplace() 和 emplace_hint() 总是成功。它们都指向创建的新元素。
- find() 会返回和参数匹配的第一个元素的迭代器,如果都不匹配,则返回容器的结束迭代器。
- equal_range() 返回一个包含迭代器的 pair 对象,它定义了一个和参数匹配的元素段。如果没有元素匹配的话,pair 的第一个成员是容器的结束迭代器;在这种情况下,第二个成员是比参数大的第一个元素,如果都没有的话,它也是容器的结束迭代器。
- lower_bound() 返回和参数匹配的第一个元素的迭代器,如果没有匹配的元素,会返回容器的结束迭代器。返回的迭代器和 range() 返回的 pair 的第一个成员相同。
- upper_bound() 返回的迭代器和 equal_range() 返回的 pair 的第二个成员相同。
- count() 返回和参数匹配的元素的个数。
map
#include
(红黑树(平衡二叉树的一种)实现,map中的元素是自动按Key升序排序,所以不能对map用sort函数;)
- map<int, string> mapStudent;
- mapStudent[0]
- mapStudent.insert(pair<int, string>(1, “student_one”)); (当map中有这个关键字时,insert操作是插入数据不了的)
- mapStudent.insert(map<int, string>::value_type (1, “student_one”)); (当map中有这个关键字时,insert操作是插入数据不了的)
- mapStudent[1] = “student_one”; (可插入原来没有的键值对,也可以覆盖以前该关键字对应的值)
- size()
- count() 返回0或1
- find()
- lower_bound() upper_bound() equal_range()
- iterator erase(iterator it);//通过一个条目对象删除
- iterator erase(iterator first,iterator last)//删除一个范围
- size_type erase(const Key&key);//通过关键字删除
- clear() 就相当于enumMap.erase(enumMap.begin(),enumMap.end());
- begin()和end()
- swap() 交换两个同类型map的内容,m1.swap(m2);
判断插入是否成功:
pair<map<int, string>::iterator, bool> Insert_Pair;
Insert_Pair = mapStudent.insert(map<int, string>::value_type (1, "student_one"));
查找元素:
map<int, string>::iterator iter;
iter = mapStudent.find(1);
if(iter != mapStudent.end())
cout<<"Find, the value is "<<iter->second<<endl;
else
cout<<"Do not Find"<<endl;
反向遍历:
map<int, string>::reverse_iterator iter;
for(iter = mapStudent.rbegin(); iter != mapStudent.rend(); iter++)
cout<<iter->first<<" "<<iter->second<<endl;
multimap
#include
hash_set
#include <hash_set>
(使用hashtable数据结构的具有高效数据检索的关联容器,不提供反向迭代器,只有前向迭代器iterator和const_iterator,不允许插入重复的元素键值)
hash_multiset
hash_map
#include <hash_map>
(用哈希表(散列表)来实现。hash_map 查找速度会比map快,而且查找速度基本和数据数据量大小,属于常数级别)
- hash_map<int, string> mymap;
- hash_map(size_type n)
- const_iterator find(const key_type& k) const
- data_type& operator[](const key_type& k) 可插入可覆盖
- insert()
- erase
hash_multimap
heap
#include
#include
大顶堆,就每一个函数都加上第三个参数less<int>()
,假如元素是int类型的;小顶堆,就每一个函数都加上第三个参数greater<int>()
,假如元素是int类型的,一直加上,一直一致。
- make_heap(_First, _Last, _Comp):建立堆(要么大顶堆,要么小顶堆)
- push_heap( ): 在堆中添加元素
- pop_heap( ): 在堆中删除元素
- sort_heap( ): 堆排序
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void printHeap(vector<int> &v){
for(vector<int>::iterator it= v.begin();it!=v.end();++it){
cout<< *it <<" ";
}
cout<<"\n"<<endl;
}
int main()
{
vector<int> min={10,30,22,6,15,9};
//建立小顶堆
make_heap(min.begin(), min.end(), greater<int>());
printHeap(min);//6 10 9 30 15 22
//插入元素
min.push_back(20);
push_heap(min.begin(),min.end(), greater<int>());//该算法前提:必须在堆的条件下
printHeap(min); //6 10 9 30 15 22 20 仍为小顶堆
//删除堆顶元素
pop_heap(min.begin(),min.end(), greater<int>());
printHeap(min);//9 10 20 30 15 22 6 不为小顶堆 这个pop_heap操作后,实际上是把堆顶元素放到了末尾
min.pop_back();//这才彻底在底层vector数据容器中删除
printHeap(min);//9 10 20 30 15 22 仍为小顶堆
//堆排序 保持greater,小顶堆,得到的是降序
sort_heap(min.begin(),min.end(), greater<int>());//试了用less,结果杂乱无章
printHeap(min);//30 22 20 15 10 9 注意结果是降序的哦!!!其实是调用了很多次pop_heap(...,greater..),每一次都把小顶堆堆顶的元素往末尾放,没放一次end迭代器减1
return 0;
}
Algorithm
find()
InputIterator find (InputIterator first, InputIterator last, const T& val);
比如
if(find(ideque.begin(), ideque.end(), 1) == ideque.end()){
...
}
sort()
sort(first_pointer,first_pointer+n,cmp)
比如
sort(begin,end,less<int>());
max() min()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)