STL:vector(不定长数组)

STL:vector(不定长数组)  

基本操作



(1)头文件#include<vector>.

(2)创建vector对象,vector<int> vec;

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

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

(5)使用迭代器访问元素.

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

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

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

(8)向量大小:vec.size();

(9)清空:vec.clear();


else


vector的元素不仅仅可以使int,double,string,还可以是结构体,但是要注意:结构体要定义为全局的,否则会出错。下面是一段简短的程序代码:


部分操作


1.push_back  

在数组的最后添加一个数据
2.pop_back   

去掉数组的最后一个数据 
3.at               

得到编号位置的数据
4.begin          

得到数组头的指针
5.end            

得到数组的最后一个单元+1的指针
6.front       

得到数组头的引用
7.back           

得到数组的最后一个单元的引用
8.max_size    

得到vector最大可以是多大
9.capacity      

当前vector分配的大小
10.size          

当前使用数据的大小
11.resize        

改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
12.reserve     

改变当前vecotr所分配空间的大小
13.erase        

删除指针指向的数据项
14.clear         

清空当前的vector
15.rbegin       

将vector反转后的开始指针返回(其实就是原来的end-1)
16.rend         

将vector反转构的结束指针返回(其实就是原来的begin-1)
17.empty       

判断vector是否为空
18.swap        

与另一个vector交换数据

例题:木块问题(The Blocks Problem,UVa 101)



code


#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
struct data
{
    int sum,a[26];
};
class block {

   private:
            data b[25],*index;

           int sum,i,t,te,place[26];
            string ord[6],dra,dra_1;
    public:
           block();
           void initialize();
           void prepare();
           void out();
           void rev(int y);
           void order();
           void over(int x,int y)
};
void block::over(int x,int y)
{
    int j=x,k=y,l,n,m;
    index=&b[place[x]];
    for(i=0;index->a[i]!=x;++i);
    m=i;
    l=place[y];
    for(;i<index->sum;++i)
    {
        n=index->a[i];
        b[l].a[b[l].sum]=n;
        place[n]=l;
        ++b[l].sum;
    }
    index->sum=m;
    return;
}
block::block()
{
    ord[0]="move";
    ord[1]="over";
    ord[2]="pile";
    ord[3]="onto";
    ord[4]="quit";
}
void block::rev(int y)
{
    int o,p,q;
    index=&b[place[y]];
    for(i=0;index->a[i]!=y;++i)
        ;
    ++i;
    o=i;
    for(;i<index->sum;++i)
    {
        p=index->a[i];
        b[p].a[b[p].sum]=p;
        place[p]=p;
        b[p].sum+=1;
    }
    index->sum=o;
    return;
}
void block::order()
{
    if(place[t]==place[te])
        return;
    if(dra==ord[0])
    {
        if(dra_1==ord[1])    // move a over b
            rev(t);
        else               //move a onto b
        {
            rev(t);
            rev(te);
        }
        b[place[t]].sum-=1;
        b[place[te]].a[b[place[te]].sum]=t;
        place[t]=place[te];
        b[place[te]].sum+=1;
    }
    else
    {
        if(dra==ord[1])   //pile a over b
            over(t,te);  
        else               ////pile a onto b
        {
            rev(te);
            over(t,te);
        }
    }
    return;        
}
void block::prepare()
{
    while(1)
    {
        cin>>dra;
        if(dra==ord[4])
            break;
        cin>>t>>dra_1>>te;
        order();
    }
    return;
}
void block::out()
{
    for(i=0;i<sum;++i)
    {
        printf("%d:",i);
        if(b[i].sum)
        {
            for(te=0;te<b[i].sum;++te)
                printf(" %d",b[i].a[te]);
        }
        printf("\n");
    }
    return;
}
void block::initialize()
{
    while(1)
    {
        cin>>sum;
        for(i=0;i<sum;++i)
        {
            place[i]=i;    //用于记录对应的积木在哪个位置
            b[i].sum=1;
            memset(b[i].a,-1,26*sizeof(int));
            b[i].a[0]=i;
        }
        prepare();
        out();
        break;
    }
    return;
}
int main(){
    block a;
    a.initialize();
    return 0;
}

Lico

赞赏

长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。



例题:木块问题(The Blocks Problem,UVa 101)




code


#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
struct data
{
    int sum,a[26];
};
class block{

   private:
            data b[25],*index;

           int sum,i,t,te,place[26];
            string ord[6],dra,dra_1;
    public:
           block();
           void initialize();
           void prepare();
           void out();
           void rev(int y);
           void order();
           void over(int x,int y)
};
void block::over(int x,int y)
{
    int j=x,k=y,l,n,m;
    index=&b[place[x]];
    for(i=0;index->a[i]!=x;++i);
    m=i;
    l=place[y];
    for(;i<index->sum;++i)
    {
        n=index->a[i];
        b[l].a[b[l].sum]=n;
        place[n]=l;
        ++b[l].sum;
    }
    index->sum=m;
    return;
}
block::block()
{
    ord[0]="move";
    ord[1]="over";
    ord[2]="pile";
    ord[3]="onto";
    ord[4]="quit";
}
void block::rev(int y)
{
    int o,p,q;
    index=&b[place[y]];
    for(i=0;index->a[i]!=y;++i)
        ;
    ++i;
    o=i;
    for(;i<index->sum;++i)
    {
        p=index->a[i];
        b[p].a[b[p].sum]=p;
        place[p]=p;
        b[p].sum+=1;
    }
    index->sum=o;
    return;
}
void block::order()
{
    if(place[t]==place[te])
        return;
    if(dra==ord[0])
    {
        if(dra_1==ord[1])    // move a over b
            rev(t);
        else               //move a onto b
        {
            rev(t);
            rev(te);
        }
        b[place[t]].sum-=1;
        b[place[te]].a[b[place[te]].sum]=t;
        place[t]=place[te];
        b[place[te]].sum+=1;
    }
    else
    {
        if(dra==ord[1])   //pile a over b
            over(t,te);  
        else               ////pile a onto b
        {
            rev(te);
            over(t,te);
        }
    }
    return;        
}
void block::prepare()
{
    while(1)
    {
        cin>>dra;
        if(dra==ord[4])
            break;
        cin>>t>>dra_1>>te;
        order();
    }
    return;
}
void block::out()
{
    for(i=0;i<sum;++i)
    {
        printf("%d:",i);
        if(b[i].sum)
        {
            for(te=0;te<b[i].sum;++te)
                printf(" %d",b[i].a[te]);
        }
        printf("\n");
    }
    return;
}
void block::initialize()
{
    while(1)
    {
        cin>>sum;
        for(i=0;i<sum;++i)
        {
            place[i]=i;    //用于记录对应的积木在哪个位置
            b[i].sum=1;
            memset(b[i].a,-1,26*sizeof(int));
            b[i].a[0]=i;
        }


猜你喜欢

转载自blog.csdn.net/qq_42390424/article/details/81051180
今日推荐