zoukankan      html  css  js  c++  java
  • 常用STL容器

    vector

    头文件<vector>

    可变数组,类似数组。

    构造方法

    vector();
    //构造一个空的vector
    例 : vector<int> a;
    
    vector( size_type num, const TYPE &val );
    //构造一个初始放入num个值为val的元素的vector
    例 : vector<int> v1( 5, 42 ); //构造了一个包含5个值为42的元素的vector
    
    vector( const vector &from );
    //构造一个与vector from 相同的vector 
    
    vector( input_iterator start, input_iterator end );
    //构造一个初始值为[start,end)区间元素的vector(注:半开区间). 
    

    常用方法

    push_back()

    void push_back( const TYPE &val );

    添加值为val的元素到当前vector末尾。

    pop_back()

    void pop_back();

    删除当前vector最末的一个元素。

    clear()

    void clear();

    删除当前vector中的所有元素。

    注:不释放内存,若要释放内存,请用vector<ElementType>().swap(vec);

    size()

    size_type size();

    size() 函数返回当前vector所容纳元素的数目。

    empty()

    bool empty();

    如果当前vector没有容纳任何元素,则empty()函数返回true,否则返回false。

    修改元素

    用=赋值即可。

    vec[i] = x;

    把 vec 里下标为 i 的元素的值修改为 x.

    二维vector

    vector<vector<int> > vec2; 一维一维地赋值

    注:<int> >中的空格不可省略;

    set

    头文件<set>

    集合,其中元素无重复。

    构造方法

    set();
    //构造一个空的set
    例 : set<int> a;
    
    set( const set &from );
    //构造一个与set from 相同的set 
    
    set( input_iterator start, input_iterator end );
    //构造一个初始值为[start,end)区间元素的set(注:半开区间). 
    

    example

    // constructing sets
    #include <iostream>
    #include <set>
    using namespace std;
    
    bool fncomp (int lhs, int rhs) {return lhs<rhs;}
    
    struct classcomp {
      bool operator() (const int& lhs, const int& rhs) const
      {return lhs<rhs;}
    };
    
    int main ()
    {
      set<int> first;                           // empty set of ints
    
      int myints[]= {10,20,30,40,50};
      set<int> second (myints,myints+5);        // pointers used as iterators
    
      set<int> third (second);                  // a copy of second
    
      set<int> fourth (second.begin(), second.end());  // iterator ctor.
    
      set<int,classcomp> fifth;                 // class as Compare
    
      bool(*fn_pt)(int,int) = fncomp;
      set<int,bool(*)(int,int)> sixth (fn_pt);  // function pointer as Compare
    
      return 0;
    }
    
    

    常用方法

    insert()

    iterator insert( iterator i, const TYPE &val );
    //在迭代器i前插入val;
    
    void insert( input_iterator start, input_iterator end );
    //将迭代器start开始到end结束返回内的元素插入到集合中;
    
    pair insert( const TYPE &val );
    //在当前集合中插入val元素,并返回指向该元素的迭代器和一个布尔值来说明val是否成功的被插入了。
    

    注:插入两个相同的元素是无效的。

    count()

    size_type count( const key_type &key );

    返回当前集合中出现的某个值的元素的数目。

    erase()

    void erase( iterator i );
    //删除i元素;
    
    void erase( iterator start, iterator end );
    //删除从start开始到end结束的元素;
    
    size_type erase( const key_type &key );
    //删除等于key值的所有元素(返回被删除的元素的个数)。
    

    clear()

    void clear();

    删除当前vector中的所有元素。

    注:会清空内存。

    size()

    size_type size();

    size() 函数返回当前vector所容纳元素的数目。

    empty()

    bool empty();

    如果当前vector没有容纳任何元素,则empty()函数返回true,否则返回false。

    find()

    iterator find( const key_type &key );

    在当前集合中查找等于key值的元素,并返回指向该元素的迭代器;如果没有找到,返回指向集合最后一个元素的迭代器。

    遍历

    迭代器set<T>::iterator it

    for(set<T>::iterator it = s.begin(); it != s.end(); it++){
    	//遍历操作
    }
    

    注: 在C++里遍历set是从小到大排序的,也就是说set会帮我们排序。

    map

    头文件<map>

    映射,由关键字集合(key)值集合(value)组成。

    构造方法

    map();
    //构造一个空的set
    例 : map<char, int> first;
    
    map( const map &from );
    //构造一个与map from 相同的map
    例 : map<char, int> second(first);
    
    map( input_iterator start, input_iterator end );
    //构造一个初始值为[start,end)区间元素的map(注:半开区间). 
    例 : map<char, int> third(first.begin(), first.end());
    

    常用函数

    insert()

    pair insert( const pair &val );

    只有在val不存在时插入val。返回值是一个指向被插入元素的迭代器和一个描述是否插入的bool值。

    pair是一个标准库类型,定义在头文件utility中。可以看成是有两个成员变量firstsecond的结构体,并且重载了<运算符(先比较first大小,如果一样再比较second)。当我们创建一个pair时,必须提供两个类型。

    pair的定义:pair<string, int> p;

    样例:

    #include<map>
    #include<string>
    #include<utility>
    using namespace std;
    int main(){
        map<string, int> dict;
        dict.insert(make_pair("Tom", 1));
        //make_pair(V1, v2)函数返回由v1和v2初始化的pair,类型可以从v1和v2的值推断出来。
    }
    

    注: 如果插入的key之前已经存在,将不会插入新的value值代替原来的,即本次插入无效。

    count()

    size_type count( const KEY_TYPE &key );

    count()函数返回map中键值等于key的元素的个数。

    如果存在返回1,否则0.

    其他与set相似

    映射的访问

    []来访问。

    例:dict[key]

    如没有插入该key,则会返回value的对应类型的默认值。

    也可以直接用本方法赋值来插入映射。

    遍历

    使用迭代器遍历,和set差不多。

    迭代器定义:map<T1, T2>::iterator it;

    迭代器指向的元素是一个pair,其成员firstsecond分别对应映射的keyvalue

    ->运算符来获取值,it->first(*it).first.

    for(map<T1, T2>::iterator it = dict.begin(); it != dict.end(); it++){
    	//遍历操作,例:
    	cout << it->first << " -> " << it->second << endl;
    }
    

    注: 在C++里遍历map也是从小到大排序的。

    二维

    //map套set
    map<T1, set<T2> > m1;
    
    //map套map
    map<T1, map<T2, T3> > m2;
    

    stack

    头文件<stack>

    只允许在栈的一端插入或删除元素。(LIFO : Last In First Out)

    构造方法

    stack<T> s;  //空栈
    
    stack<T> s( const Container& ctnr = Container() );
    //通过别的容器来构造栈,ctnr可以是deque、vector.
    

    常用函数

    push()

    void push( const TYPE &val );

    val 值压栈,使其成为栈顶的第一个元素。

    pop()

    void pop();

    移除堆栈中最顶层元素。

    size()

    size_type size();

    返回当前堆栈中的元素数目。

    empty()

    bool empty();

    如当前堆栈为空,empty() 函数 返回 true 否则返回false.

    top()

    TYPE &top();

    返回对栈顶元素的引用。

  • 相关阅读:
    Paths on a Grid
    Three Kingdoms(优先队列+bfs)
    Factstone Benchmark(数学)
    C. Searching for Graph(cf)
    B. Trees in a Row(cf)
    String Successor(模拟)
    乘积最大的分解(数学)
    Kindergarten Election
    In 7-bit
    Friends
  • 原文地址:https://www.cnblogs.com/IvyzZ/p/13630813.html
Copyright © 2011-2022 走看看