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();

    返回对栈顶元素的引用。

  • 相关阅读:
    Populating Next Right Pointers in Each Node II
    Populating Next Right Pointers in Each Node
    Construct Binary Tree from Preorder and Inorder Traversal
    Construct Binary Tree from Inorder and Postorder Traversal
    Path Sum
    Symmetric Tree
    Solve Tree Problems Recursively
    632. Smallest Range(priority_queue)
    609. Find Duplicate File in System
    poj3159最短路spfa+邻接表
  • 原文地址:https://www.cnblogs.com/IvyzZ/p/13630813.html
Copyright © 2011-2022 走看看