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

原创 2001年11月10日 18:39:00

 

STL程序设计实践一:谨慎使用下标运算符<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

   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

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

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

C++ 下标运算符 重载

我们常用下标运算符operator[]来访问数组中的某个元素.它是一个双目运算符,第一个运算符是数组名,第二个运算符是数组下标.在类对象中,我们可以重载下标运算符,用它来定义相应对象的下标运算. 注...
  • u010734727
  • u010734727
  • 2014年11月12日 15:44
  • 519

重载数组下标操作符,使用operator

重载数组下标操作符,使用operator 原贴:http://blog.csdn.net/keeplooking2510/article/details/8042057     数组在类的定义中...
  • gencheng
  • gencheng
  • 2015年04月01日 14:43
  • 1473

stl中pair容器的用法

有时候,要用pair的时候就会忘记了,又得重新翻资料,所以在blog中总结一下 简而言之pair就是一个结构体,但是比结构体更加得灵活 template struct pair //模板...
  • zycxnanwang
  • zycxnanwang
  • 2016年09月01日 20:56
  • 1296

STL容器map的下标运算符[]

在STL中,map是一个关联式容器,它提供一对一的数据处理能力,即其中每一个元素都是一个键值对,通过一个唯一的关键字,可以唯一映射到对应的数据值。而map中重载了下标运算符[],通过下标操作,开发人员...
  • shenya1314
  • shenya1314
  • 2017年06月01日 13:18
  • 121

STL容器map的下标运算符[]

在STL中,map是一个关联式容器,它提供一对一的数据处理能力,即其中每一个元素都是一个键值对,通过一个唯一的关键字,可以唯一映射到对应的数据值。而map中重载了下标运算符[],通过下标操作,开发人员...
  • shudou
  • shudou
  • 2013年12月15日 19:37
  • 9104

STL容器map的下标运算符[]

在STL中,map是一个关联式容器,它提供一对一的数据处理能力,即其中每一个元素都是一个键值对,通过一个唯一的关键字,可以唯一映射到对应的数据值。而map中重载了下标运算符[],通过下标操作,开发人员...
  • weixin_36145588
  • weixin_36145588
  • 2017年07月26日 20:25
  • 65

C++ STL map 下标操作注意事项

今天的程序出了一个Bug,查到的原因是使用map下标操作的问题,在这里转一个作为备忘 一个map就是一个key、value对偶的序列,它提供基于key的快速提取操作。也就是说,可以用下标运算符[]...
  • lldqxu
  • lldqxu
  • 2015年04月01日 19:24
  • 2446

C++运算符重载

转自:http://blog.csdn.net/insistgogo/article/details/6626952 什么是运算符的重载?          运算符与类结合,产生新的含...
  • jinzhilong580231
  • jinzhilong580231
  • 2013年04月17日 10:48
  • 667

下标运算符的重载

我们常用下标运算符operator[]来访问数组中的某个元素.它是一个双目运算符,第一个运算符是数组名,第二个运算符是数组下标.在类对象中,我们可以重载下标运算符,用它来定义相应对象的下标运算. ...
  • u014411752
  • u014411752
  • 2014年07月01日 20:03
  • 651

C++ STL/ (10) 阶段小结--容器的共性以及使用场景

在前面的blog中,我们介绍了顺序容器(string,vector,deque,list,stack,queue)和关联容器(set,multiset,map,multimap)。本节,我们就来总结一...
  • anran_zhou
  • anran_zhou
  • 2017年04月09日 13:36
  • 329
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STL程序设计实践一:谨慎使用下标运算符
举报原因:
原因补充:

(最多只允许输入30个字)