其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
STL程序设计实践一:谨慎使用下标运算符

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

 

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

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

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


相关文章

相关软件