stl容器
1 序列容器
(1) 向量vector<vector>
(2) 列表list<list>
(3)双端列队deque<deque>
(4)序列容器适配器(栈stack<stack>,队列queue<queue>,优先级队列priority_queue<queue>)
2关联容器
(1)集合set<set>
(2)多重集合multiset<set>
(3)映射map<map>
(4)多重映射multimap<map>
(5)位集合bitlist<bitset>
向量元素的构造
1 vector();//vector<int> v;
2 vector(n,x);//vector<int> v(100,0);
3 vector(v);
4 vector(first,last);
向量元素的访问
1 at(i);
2 front();
3 back();
向量元素的添加
1 push_back();
2 insert(i,x);//v.insert(v.begin()+8,3,1);
3 insert(i,n,x);//v.insert(v.begin(),v.end()-5,v.end());
向量元素的删除
1 pop_back();
2 erase(i);
3 erase(first,last);
4 clear()
列表的构造 (双向链表)
1 list();
2 list(n,x);
3 list(v);
4 list(first,last);
列表元素的访问
1 没有at和operator[]成员函数只能通过指示器进行元素访问
2 同样提供front()和back();
列表元素的添加
1 同样提供push_back(),insert();
2 push_front(x);首部添加x
3 splice(i,x);//将列表x中的元素剪贴到当前列表i的位置之前
4 splice(i,x,first//);//将列表x中first之后的元素剪贴到当前列表的i位置
5 splice(i,x,first,last);
列表元素的删除
1 pop_back();
2 erase();
3 pop_front();
4 remove(x)//删除与x相等的元素
双端队列
特性
1 可以向前,向后动态增长
2 支持随机访问,可以很方便的定位到第N个元素
3 可以高效在首和尾插入和删除,但在别的位置插入和删除,效率有所降低
双端队列的构造
1 deque();
2 deque(n,x);
3 deque(v);
4 deque(first,last);
双端队列元素的访问
和vector一样
双端队列元素的添加
和vector基本类似
双端队列元素的删除
可以使用pop_back(),erase();还提供pop_front()
容器适配器
1 栈stack<class T,class Container=deque<T> >
创建栈时,可以采用容器类型为vector,list deque;//stack<int , vecort<int > > sv;
栈的操作:
1 push(x);
2 pop();
3 top();//获取栈顶元素(但不弹出);
2 队列queue<class T,class Container=deque<t> >
创建队列时,可以采用容器类型为list deque;//queue<int , vecort<int > > qv;
队列的操作:
1 push(x);//元素压入尾部
2 pop;//弹出首部元素
3 front;//获取首部元素
4 back;//获取尾部元素
3 优先级队列priority_queue<class T,class Container=vector<T>,class Comparator=less<class Container::value_type> >
优先级队列的操作:
1 push(x);//元素压入尾部
2 pop;//弹出首部元素
3 top;//获取栈顶元素(但不弹出)
映射<class key,class T,class Comparator=less<key>,class Allocator=allocator<pair<const key,T> > >
映射的构造
1 map();
2 map(x);
3 map(first,last);
映射元素的访问
1 可以用指示器和"[]"
2 如果"[]"访问的元素不存在时,对自动创建一个空元素
3 指示器获取的是健值对
映射元素的添加
1 insert(x);
2 insert(i,x);
3 insert(m,n);
映射元素的删除
1 erase(i);
2 erase(first,last);
3 erase(x);
4 clear();
映射元素的查找
1 find(key);//如果未找到返回end
2 count(key);//只返回0或1
多重映射(一个键对应多个值,所以不能用[])
集合(不允许重复)
集合的构造
1 set();
2 set(x);
3 set(first,last) ;
集合元素的访问
只能通过指示器
集合元素的添加
1 insert(x);
集合元素的删除
1 erase(i)
2 erase(first,last);
3 clear();
集合元素的查找
1 find(key);//如果未找到返回end
2 count(key);//只返回0或1
多重集合(允许重复)multiset
位集合(bitset)
1 并不属于stl容器,也不支持指示器的操作
位集合的概念:每个元素对应数值的每一位,他的值为0或1
template<size_t N>
N对应待处理的位数
bitset<32> i;
bitset<sizeof(int)> i;
位集合的构造
1 bitset()
2 bitset(x)
3 bitset(string ,first,count);//从字符串的first位置开始,复制字符串至位集合,first和count通常可以省掉
位集合的输出:cout;
位元素的操作可以直接用[]
1 test();//测试i位的值是否为真(1)
2 set(i);//第i位设置为1
3 reset(i);
4 set();
5 reset();
6 flip(i);
7 flip();
8 any();//集合中是否包含1
9 none();
位集合和赋值与转换
1 可以用=
bitset提供数据转换
1 to_ulong();//返回一个unsigned long
2 to_string();
位集合的尺寸
1 count()//获取北设置的位的数目;
2 set();//获取所有位的数目
位集合的得比较
a==b;//判断两个位集合的元素数目和内容是否完全一样
a!=b;
位集合的的位操作
1 a&b;//位与
2 a|b;//位或
3 a^b;//异或
4 ~a;//取补
5 a<<n;//左移
6 a>>n;
复合的位操作
7 a<<=n;
8 a>>=n;
9 a&=b;
10 a|=b;
11 a^=b;
运算是bitset会被看成一个对应的数值参加运算
/////////////////////////////////////////////////////////////////////////////////////////////////
stl函数对象
plus 算术 返回两个数的和:a+b;
minus 算术 返回两个数的差:a-b;
multiplies 算术 返回两个数的乘积:a*b;
divides 算术 返回两个数的商:a/b;
muduluse 算术 返回两个数的模:a%b;
negate 算术 返回两个数的相反数:-a;
equal_to 关系 a==b
not_equal_to 关系 a!=b
greater 关系 a>b
less 关系 a<b
greater_equal 关系 a>=b
less_equal 关系 a<=b
logical_and 逻辑 a&&b
logical_or 逻辑 a||b
logical_not 逻辑 !a
例子:
plus<int> x;
cout<<boolalpha<<x(10,20);
cout<<endl;
算法<functional>
要用到算术运算还要<numeric>