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

作为一个C语言程序猿来说,数组是非常重要的,也是必不可少的一种数据组织和存储方式。在C++中却很少使用数组。从根本说主要有以下几个方面:

  1. 数据存储方式:

    (1)数组的内存地址是连续的,也就是说如果你要申请的内存地址必须是连在一起的。数组为每一个元素申请的空间大小相同的,连续的存储空间。对于空间的申请和控制需要我们自己控制。

    (2)vector也是连续的存储空间。对于空间的申请和控制都由标准库帮我们管理。

  2. 空间利用率:

(1)数组在定义的时候已经指定了空间的大小,不能改变,除非你新申请一个空间来存储之前的数据。数组初始化之后,他的空间一般都是被完全利用的。

(2)vector和数组有略微不同。vector的长度是可变的,用户可以根据自己的需要插入和删除一个或者多个元素。其实,使用vector的时候我们要保证vector能动态的增长,标准库会为vector提供备用空间来新加元素。空间利用率不是很高。

3.空间申请和占用:

(1)数组一经定义大小和空间都确定了,大小是存储的数据类型长度和数据个数的乘积。

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

4.附加操作:

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

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

时间: 2024-07-31 14:34:56

C++数组和vector容器的比较以及浅析的相关文章

vector容器的用法以及动态数组

vector容器不必去管大小 string申明的数组已经是动态的了 若是int类型的话,需要 cin>>N: int a[N]会出错 ,必须是int *p = new int[N] 然后再手动释放空间

用vector容器代替数组 ——使用数组初始化vector对象

在C++中,我们不能用数组直接初始化另一数组,而只能创建新的数组,然后显式的把原数组的元素逐个复制给新的数组. 按照C语言中的做法: const size_t arry_size=6; int int_arry[arry_size]={0,1,2,3,4,5}; int int_arry2[arry_size]; for(size_t ix=0;ix<arry_size;++i)        int_arry2[ix]=int_arry[i]; 而使用数组初始化vector对象,可以直接利用一

Vector容器 和 iteration 迭代器

vector容器 vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库负责管理存储元素的相关内存.我们把vector称为容器,是因为它可以包含其他对象.一个容器中的所有对象都必须是同一种类型的. 使用vector之前,必须包含相应的头文件.#include <vector> using std::vector; vector是一个类模板(class template).模板允许程序员编写单个类或函数定义,这个类和函数定义可用于不同的数据类型上.

vector容器用法详解

vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组.像数组一样,vector类也用从0开始的下标表示元素的位置:但和数组不同的是,当vector对象创建后,数组的元素个数会随着vector对象元素个数的增大和缩小而自动变化. vector类常用的函数如下所示: 1.构造函数 vector():创建一个空vector vector(int nSize):创建一个vector,元素个数为nSize vector(int nSize,const t& t):创建一个vector,元

谈谈vector容器的三种遍历方法

说明:本文仅供学习交流,转载请标明出处,欢迎转载! vector容器是最简单的顺序容器,其使用方法类似于数组,实际上vector的底层实现就是采用动态数组.在编写程序的过程中,常常会变量容器中的元素,那么如何遍历这些元素呢?本文给出三种遍历方法. 方法一:采用下标遍历 由于vector容器就是对一个动态数组的包装,所以在vector容器的内部,重载了[]运算符,函数原型为:reference operator [] (size_type n);所以我们可以采用类似于数组的方式来访问vector容

C++ STL vector容器学习

STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector,list, deque, set, map等),算法完成特定任务,迭代器用来遍历容器对象,扮演容器和算法之间的胶合剂. 模板类vector 在计算中,矢量(vector)对应数组,它的数据安排以及操作方式,与array非常类似.在C++中,使用vector模板类时,需要头文件包含#include<v

STL学习二:Vector容器

1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添加或移除元素非常快速.但是在中部或头部插入元素或移除元素比较费时. 2.vector对象的默认构造 vector采用模板类实现,vector对象的默认构造形式 vector<T> vecT; vector<int> vecInt;          //一个存放int的vector容器

把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)

督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 相关的内存,因为vetcor是类模版,对应多个不同类型,比如int,string,或者自己定义的数据类型等. 程序开头应如下声明 #include <iostream> #include <vector> #include <string> using std::strin

vector 容器迭代器(二)

vector容器迭代器(一)里面大牛对vector介绍的已经很详细了,下面结合自己的项目开发的问题谈谈使用 一.关于capacity和size[1] 在下想用数组引用的方式遍历vector中的元素,结果一直采用capacity,最后的结果就是总是出错,查了半天才知道原来这个capacity是只扩不收的,我因为 需要删除了vector(采用erase,第三部分)中的数,但是capacity没有更新,结果我按照capacity的指示寻找元素,明显就会越界 [1] ---->Size指目前容器中实际有