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

    技术2022-05-11  128

     

    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

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

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

    最新回复(0)