华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1165|回复: 0
打印 上一主题 下一主题

C++数组和vector容器的比较以及浅析

[复制链接]

738

主题

1485

帖子

5420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5420
跳转到指定楼层
楼主
发表于 2018-8-11 10:28:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
作为一个C语言程序猿来说,数组是非常重要的,也是必不可少的一种数据组织和存储方式。在C++中却很少使用数组。从根本说主要有以下几个方面:

  • 数据存储方式:   
    (1)数组的内存地址是连续的,也就是说如果你要申请的内存地址必须是连在一起的。数组为每一个元素申请的空间大小相同的,连续的存储空间。对于空间的申请和控制需要我们自己控制。
    (2)vector也是连续的存储空间。对于空间的申请和控制都由标准库帮我们管理。


  • 空间利用率:

        (1)数组在定义的时候已经指定了空间的大小,不能改变,除非你新申请一个空间来存储之前的数据。数组初始化之后,他的空间一般都是被完全利用的。
        (2)vector和数组有略微不同。vector的长度是可变的,用户可以根据自己的需要插入和删除一个或者多个元素。其实,使用vector的时候我们要保证vector能动态的增长,标准库会为vector提供备用空间来新加元素。空间利用率不是很高。

    3.空间申请和占用:
        (1)数组一经定义大小和空间都确定了,大小是存储的数据类型长度和数据个数的乘积。
        (2)vector在确定元素个数的时候,其实还是有一部分的备用空间来保证容器能够动态增长。如果备用空间不够了,那么vector就会重新申请内存,并且这个时候的内存大小一般都是原来大小的两倍,vector容器重新分配2倍于原来空间大小之后就会把原来的内容拷贝过来,然后就在原来元素之后添加新的元素,并释放原内容的内存空间。

    4.访问元素:
        (1)vector可以使用迭代器和下标访问元素,下标访问的时候,下标的数据类型为vector::size_type
        (2)数组元素能使用下标和指针访问,下标的数据类型是:size_t。指针操作类似于迭代器。

    5.附加操作:
        vector作为标准库的容器,标准库为我们提供了很多的附加操作。和数组相比,vector还提供了迭代器为我们访问容器元素,可以参照我之前的文章。

    在C++中我们要尽量使用标准库提供的STL来代替数组,让标准库为我们管理内存的申请和释放等。但是如果你的应用对时间和空间要求非常高,那么最好还是使用数组,不过一定要保证对数组的合理操作。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-11-2 16:41 , Processed in 0.144824 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表