STL程序设计实践一:谨慎使用下标运算符

类别:编程语言 点击:0 评论:0 推荐:

 

STL程序设计实践一:谨慎使用下标运算符

   STL中容器占据很重要的地位,部分容器支持像数组一样的下标运算符,使其能向数组一样方便的访问,但也存在同样的限制,如向量和双端队列。所以在应用中要小心使用。举例说明:

   vector<int> nvec(10,7); //定义元素都为7大小为10的整形向量

   int n = nvec[0];       //获取向量的第一个元素

 

deque<int> ndeq(1,0);   //定义一个整形双端队列

   ndeq[0]=7;             //修改元素

   ndeq[1]=8;             //添加元素

   int ni = ndeq[1];       //访问双端队列的第二个元素

   ni = ndeq[2];       //访问双端队列的第三个元素

这段代码编译时没有问题。但是很明显ni最后的值就象数组一样是不确定的,这样不出错是因为STL中容器的内存分配是动态的,它在需要时一次分配了最小的分配单元,在WINDOWS下为4K(这和操作系统有关系),但是如果下标值过大运行时就出非法访问的错误。这是因为越界访问造成的,所以在应用中一定要注意检查是否越界。

STL中映像容器同样支持下标操作,但有着和向量、双端队列不同之处。

map<int,int> d;

d[1]=9;

cout <<d.size()<<endl; //输出为1

int dd= d[2];

cout <<d.size()<<endl; //输出为2

这表示当你用下标操作访问映像时,如果要访问的对象不存在则映像就添加该元素,但其存储对象的值和实现有关。所以应用中不小心出现了此种情况时,很可能导致出现想不到的错误。

文章写的仓促,有错别字或错误请大家多批评指出。谢谢大家的捧场,在下感激不尽,欢迎和大家交流 (----袁凯----)。

本文地址:http://com.8s8s.com/it/it29901.htm