STL简单讲解

STL简单讲解

    
// 队列的使用

        #include
< queue >

                
// 在BFS中会使用到队列

            
// 优先队列
                
        priority_queue
< 元素类型 >  Q;
        Q.push();        
//  压入元素
    Q.pop;         //  弹出
    Q.front();      //  取顶元素
    Q.empty();      //  判断是否为空        

            
        
//  优先队列中默认的是大的先出
        
//  若要使小的先出,则可在元素类型struct中重载 “<”

        
struct  node{
            friend 
bool   operator   <  (node n1, node n2)
            {
                
return  n1.Step  >  n2.Step; 
                
//  小的先出
            }
            
int  Step;
        };

        
//  优先队列    取顶时应使用  Q.top();




    
// 链表的使用

        #include
< list >

        list
< int >  lis;
        list
< int > ::iterator iter;  //  跌代器 (指针)

        list.push_back(); 
//  在链表尾插入元素

        
// 操作表中的每个元素时,必须要使用指针
        
//     *iter 即为 iter 所指的元素的值

        
for (iter  =  lis.begin(); iter  !=  lis.end(); iter  ++ )
        {    
            iter 
=  lis.erase(iter);
            
//  删除表中一位置的元素
            
//  若删除指定位置,第 i 个,可用 i 记数 
        }

        
//     lis.insert() 插入在当前指针所指的元素之前


    
// 容器    vector 的使用

        #include
< vector >
        
        vector
< int >  v;
        v.push_back();    
//  在尾部插入元素
        v.size();         //  返回容器的大小
        v.clear();         //  清除容器的元素
        v.resize();         // 分配表的大小

        
// 若使用vector 来表示二维,则可

        vector
< vector < int >    >  v(n);
        
// 或者
        vector < vector < int >   >  v;
        v.resize(n);

        
//  可以表示有 n 行的二维数组
        
//  对于每一维 , v[i] 的操作与 v 一致
        

        
        
//  传 vector 的使用
         void  pp(vector < vector < int >   >    & vv)
        {
            
//  传vector 的函数使用

            
int  i ,j;
            
for (i  =   0  ; i  <  vv.size(); i  ++ )
            {
                
for (j  =   0  ; j  <  vv[i].size(); j  ++ )
                    printf(
" %d  " ,vv[i][j]);
                printf(
" \n " );
            }
        }

        
void  main()
        {
            
int  i,j;

            vector
< vector < int   >   >  a( 10 );

            
for (i  =   0  ; i  <   10  ; i ++ )
                
for (j   =   0  ; j  <  i;j  ++ )
                    a[i].push_back(j);
            
            pp(a);
            
            
//  调用函数
        }






    
//  C++ 自带的排序 sort

        #include
< algorithm >
            
// 头文件

        
bool  cmp( int  a,  int  b){
            
return  a  >  b;
        }    
//  使得降序排列

        
// 默认为升序    sort(a,a + n);

        sort(A, A
+ n,cmp);

        
// 也可对结构体排序,比较函数自己实现


    
//  要对容器中的元素排序

        
//  可使用跌代器
        
//  把容器中起始与结束的指针传给 sort

    
//  example

        vector
< int >  v;
        vector
< int >  ::iterator it1;
        vector
< int >  ::iterator it2;

        it1 
=  v.begin();
        it2 
=  v.end();

        sort(it1, it2 ,cmp);



    
//  string

        
//  使用起来相对比较多 , 主要在处理字符串的时候
        
        #include
< string >
        
         
string   s1 , s2 , s3;
        
        
//  string 类的赋值
        
//  即可以 相互之间,也可以把字符串直接赋给 string 类
    
//  example
        
         
char  ss[]  =  “abcd”;
        s1 
=  “”;          //  string 类初始为空
    s1  =  ss ;         //     把字符串直接赋给string
    s2  =  s1;         //  sgring 之间赋值
    
    
//  string 类可以直接使用 + 来进行字符串的拼接
    
         s1 
=  “ab”;
         s2 
=  “cd”;
        s3 
=  s1  +  s2;
        
//     操作的结果 s3 == “abcd”;
    
//  常用的函数     
    s1.size();      //  字符串的大小,既长度
    
//  对于已经赋值的字符串,可以直接对下表进行操作
    
//  可以使用查找函数
    s1.find(s2) ;      //  在s1 中查找 s2 ,如果存在,返回起始下表,否则返回 -1
    s1.substr(起始位置,长度);  // 取子串
    

你可能感兴趣的:(STL简单讲解)