STL stack/queue/sort/vector/set/map 的使用方法

C++ STL--stack/queue/sort/vector/set/map的使用方法

1stack
stack
模板类的定义在<stack>头文件中。
stack
模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要
的,在不指定容器类型时,默认的容器类型为deque
定义stack 对象的示例代码如下:
stack<int> s1;
stack<string> s2;
stack
的基本操作有:
入栈,如例:s.push(x);
出栈,如例:s.pop();注意,出栈操作只是删除栈顶元素,并不返回该元素。
访问栈顶,如例:s.top()
判断栈空,如例:s.empty(),当栈空时,返回true
访问栈中的元素个数,如例:s.size()

 

2queue
queue
模板类的定义在<queue>头文件中。
stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类
型,元素类型是必要的,容器类型是可选的,默认为deque类型。
定义queue 对象的示例代码如下:
queue<int> q1;
queue<double> q2;

queue 的基本操作有:
入队,如例:q.push(x);x 接到队列的末端。
出队,如例:q.pop();弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问队首元素,如例:q.front(),即最早被压入队列的元素。
访问队尾元素,如例:q.back(),即最后被压入队列的元素。
判断队列空,如例:q.empty(),当队列空时,返回true
访问队列中的元素个数,如例:q.size()


3sort

sort模板类的定义在< algorithm >头文件中。

语法描述为:

例如对数组A[n]排序:

sort(A,A+n);

 

直接使用sort函数默认为升序排序,若想降序排列,可编写如下函数:

bool compare(int a,int b)
{
      return a<b;   //
升序排列,如果改为return a>b,则为降序

}

此时在使用sort函数时,格式为:

 

sort(A,A+n,compare);

 

4vector

vector模板类的定义在<vector >头文件中。

创建vector对象,vector<int> vec;

尾部插入数字:vec.push_back(a);

使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。

使用迭代器访问元素.

vector<int>::iterator it;

for(it=vec.begin();it!=vec.end();it++)

   cout<<*it<<endl;

插入元素:    vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;

删除元素:    vec.erase(vec.begin()+2);删除第3个元素

vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始

向量大小:vec.size();

清空:vec.clear();


5set

set模板类的定义在<set>头文件中。

常用操作:
1.
元素插入:insert()
2.
中序遍历:类似vector遍历(用迭代器)
3.
反向遍历:利用反向迭代器reverse_iterator
    
例:
    set<int> s;
    ......
    set<int>::reverse_iterator rit;
    for(rit=s.rbegin();rit!=s.rend();rit++)
4.
元素删除:与插入一样,可以高效的删除,并自动调整使红黑树平衡。
            set<int> s;
           s.erase(2);        //
删除键值为2的元素
            s.clear();
5.
元素检索:find(),若找到,返回该键值迭代器的位置,否则,返回最后一个元素后面一个位置。
            set<int> s;
           set<int>::iterator it;
           it=s.find(5);    //
查找键值为5的元素
           if(it!=s.end())    //
找到
               cout<<*it<<endl;
            else           //
未找到
               cout<<"
未找到";
6.
自定义比较函数
    (1)
元素不是结构体:
        
例:
        //
自定义比较函数myComp,重载()操作符
        struct myComp
        {
            bool operator()(constyour_type &a,const your_type &b)
            [
               return a.data-b.data>0;
            }
        }
        set<int,myComp>s;
        ......
        set<int,myComp>::iterator it;
    (2)
如果元素是结构体,可以直接将比较函数写在结构体内。
        
例:
        struct Info
        {
            string name;
            float score;
            //
重载“<”操作符,自定义排序规则
            bool operator <(const Info &a) const
            {
                //
score从大到小排列
               return a.score<score;
            }
        }
        set<Info> s;
        ......
        set<Info>::iterator it;


6map

map模板类的定义在<map>头文件中。

map对象是模板类,需要关键字和存储对象两个模板参数:

std:map<int,string> personnel;

这样就定义了一个用int作为索引,并拥有相关联的指向string的指针.

为了使用方便,可以对模板类进行一下类型定义,

typedef map<int,CString> UDT_MAP_INT_CSTRING;

UDT_MAP_INT_CSTRINGenumMap;

 

map的基本操作函数:
      C++ Maps
是一种关联式容器,包含关键字/
     begin()         
返回指向map头部的迭代器
      clear(
        删除所有元素
     count()         
返回指定元素出现的次数
     empty()         
如果map为空则返回true
     end()            
返回指向map末尾的迭代器
      equal_range()   
返回特殊条目的迭代器对
      erase()         
删除一个元素
     find()           
查找一个元素
      get_allocator() 
返回map的配置器
     insert()        
插入元素
      key_comp()      
返回比较元素key的函数
      lower_bound()   
返回键值>=给定元素的第一个位置
      max_size()      
返回可以容纳的最大元素个数
     rbegin()        
返回一个指向map尾部的逆向迭代器
     rend()          
返回一个指向map头部的逆向迭代器
     size()          
返回map中元素的个数
     swap()           
交换两个map
      upper_bound()    
返回键值>给定元素的第一个位置
      value_comp()     
返回比较元素value的函数

 


猜你喜欢

转载自blog.csdn.net/chu_jian86a/article/details/51151845