stl

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>

 

      

你可能感兴趣的:(算法,vector,list,String,Class,insert)