容器:vector矢量

vector(向量)是c++中的一个模板类,具体来说是一个不定长数组,并且类里还封装了一些常规操作。

如何定义:vector使用时需要头文件#include <vector> ,因为它是一个模板类,所以支持多种数据类型,包括自己定义的类。

vector<int> a(10,1);                      //这个容器里存放了十个一,若没有那个1,则默认是十个0

vector<int>b;                               //空的int容器

vector<int>b(a);                         //用a来初始化b 或者这样写vector<int>b(a.begin(),a.end());

vector<string>c(10,"c++");        //十个c++字符串 

还可以用数组初始化:

int array[ ]={1, 2, 3, 4, 5, 6, 7};
vector<int> vec(array, array+7); 

容器之间的赋值:

  • =直接赋值: 
vector<int> a(10,1);  
vector<int>b;  
b=a;  
  • assign()函数赋值 
vector<int>  a(5,20);
vector<int>  b;
b.assign(a.begin(),a.end());
  • for循环赋值 
vector<int>  a(5,20);
vector<int>  b(5,10);
b.clear();
for(vector<int>::iterator i=a.begin();i!=a.end();i++) 
{
	b.push_back(*i);
}


#vector<int>::iterator i是迭代器类似于指针 下面会说到

 

vector的一些操作方法:

    vec1.push_back(100);                                             //添加元素

    int size = vec1.size();                                               //元素个数

    bool isEmpty = vec1.empty();                                  //判断是否为空

    cout<<vec1[0]<<endl;                                             //取得第一个元素

    vec1.insert(vec1.end(),5,3);                                    //从vec1.back位置插入5个值为3的元素

    vec1.pop_back();                                                     //删除末尾元素

    vec1.erase(迭代器1,迭代器2);                             //删除之间的元素,其他元素前移

    cout<<(vec1==vec2)?true:false;                              //判断是否相等==、!=、>=、<=...

    vector<int>::iterator iter = vec1.begin();                  //获取迭代器首地址

    vector<int>::const_iterator c_iter = vec1.begin();   //获取const类型迭代器

    vec1.clear();                   //清空元素

迭代器:

这里解释一下上面的 vector<int>::iterator i,它定义了vector的迭代器 i;迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型,a.begin()和=a.end()都返回的是迭代器类型,类似于数组中的指针,同样可以使用*进行解引用。(其实a.end()返回的是vector最后一个地址再加一,有点类似于sort()的第二个参数)。

类似于const char* 和char* const的区别, vector<int>::const_iterator const vector<int>::iterator的也有类似的区别,前者不能修改元素,后者不能修改指针。

另外,vector还可以使用下标操作,例如上面代码中b[0]这样的表述。它是vector的特有访问方法,一般容器只能通过迭代器访问。还有就是必须是已经存在的元素才能够用下标操作符进行索引。

 

 

例题:木块问题(UVa 101)

从左到右总共有n个木块,得到编号为0~n-1的木块,分别摆放在顺序排列编号为0~n-1的位置。现对这些木块进行操作,操作分为四种。

1、move a onto b:把木块a、b上的木块放回各自的原位,再把a放到b上;

2、move a over b:把a上的木块放回各自的原位,再把a放到含b的堆上;

3、pile a onto b:把b上的木块放回各自的原位,再把a连同a上的木块移到b上;

4、pile a over b:把a连同a上木块移到含b的堆上。

当输入quit时,结束操作并输出0~n-1的位置上的木块情况

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值