数组的代替品——vector和array

原创 2018年04月15日 19:44:46

  • 模板类vector
类似于string类是一个动态数组
头文件:#include<vector>
声明创建一个名为vt的vector对象,他可储存n_elem个类型为typeName的元素:
vector<typeName>vt(n_elem)
  • 模板类array
array对象和数组一样其长度是固定的,也是用栈(静态存储空间)
头文件:#include<array>
声明创建一个名为arr的array对象,它包含n_elem个类型为typename的元素:
array<typeName,n_elem>arr;
与创建vector对象不同的是,n_elem不是变量。
比较数组,vector对象和array对象
#include<iostream>
#include<vector>
#include<array>
using namespace std;
int main(){
    double a1[4]={
        1.2,2.4,3.6,4.8
    };
    vector<double> a2(4);
    a2[0]=1.0/3.0;
    a2[1]=1.0/5.0;
    a2[2]=1.0/7.0;
    a2[3]=1.0/9.0;
    array<double,4>a3={
        3.14,2.72,1.62,1.41
    };
    array<double,4>a4;
    a4=a3;
    cout<<"a1[2]:"<<a1[2]<<"at"<<&a1[2]<<endl;
    cout<<"a2[2]:"<<a2[2]<<"at"<<&a2[2]<<endl;
    cout<<"a3[2]:"<<a3[2]<<"at"<<&a3[2]<<endl;
    cout<<"a4[2]:"<<a4[2]<<"at"<<&a4[2]<<endl;
    a1[-2]=20.2;
    cout<<"a1[-2]:"<<a1[-2]<<"at"<<&a1[-2]<<endl;
    cout<<"a3[2]:"<<a3[2]<<"at"<<&a3[2]<<endl;
    cout<<"a4[2]:"<<a4[2]<<"at"<<&a4[2]<<endl;
    return 0;
    }
结果:
array对象和数组存储在相同的内存区域(栈)内,而vector存储在另一个区域中(自由存储区或堆);除此之外可以将一个array对象赋给另一个array对象,但对于数组需要一个一个复制数据。
a1[-2]=20.2也就是*(a1-2)=20.2:其定义为a1指向的地方向前移动两个double元素存储20.2,也就是将信息存储在数组之外。这个位子可能在a2或者a3上,所以这表明数组是不安全的。
那么如何防止这种索引错误呢?
可以使用成员函数。就像使用cin对象的成员函数getline()来读取正行字符串一样,vector和array对象的成员函数at():
a2.at(1)=2.3;    //将2.3赋值给a2[1],能在运行期间捕获非法索引。

(六十一)vector、array和数组

模板类vector: 模板类vector类似string类,是一种动态数组。   比如说,string类可以将一个string的字符串插入到另外一个string类字符串后面。vector也可以有类似的...
  • qq20004604
  • qq20004604
  • 2015-12-04 02:25:35
  • 1772

c++ 的vector、array和数组的比较

在c++11中,STL中提拱了一个新的容器std::array,该容器在某些程度上替代了之前版本的std::vector的使用,更可以替代之前的自建数组的使用。那针对这三种不同的使用方式,先简单的做个...
  • haust_wang
  • haust_wang
  • 2015-11-15 12:16:17
  • 6688

array 与 Vector 之间的转换

ConvertArrayToVector.javaimport java.util.*;public class ConvertArrayToVector { public static voi...
  • yuyue618
  • yuyue618
  • 2009-06-15 22:47:00
  • 3607

vetor和数组的区别 vector和List的区别

(1)数组的定义需要指定其大小,且其大小是编译后能够确定的常量值(const),而vector则不需要指定其大小; (2)数组在动态分配空间之后,最后要手动delete/free分配的内存,而vect...
  • sinat_21903855
  • sinat_21903855
  • 2015-08-16 11:43:04
  • 568

java中vector,array,list,arraylist的区别

数组和其它容器的区别主要有三方面:效率,类型,和保存基本类型的能力.在Java中,数组是一种效率很高的存储和随机访问对象引用序列的方式.数组是一个简单的线性序列,因此访问速度很快,但也损失了其它一些特...
  • qq_33280890
  • qq_33280890
  • 2017-06-26 23:37:59
  • 413

linux C++ vector to array

unsigned char *aChar = 0;    std::vector vChar ;    vChar.push_back(0);    vChar.push_back(1);    vC...
  • eqxu
  • eqxu
  • 2008-03-04 23:17:00
  • 1186

vector转换成数组

std::vector,内部存储的所有元素,都是占用一片连续的内存空间。因此,比较好的做法就是直接取第一个元素的地址,得到了首地址,之后的做法与数组也是大同小异了。 举例说明。 假设函数F...
  • u012160954
  • u012160954
  • 2016-02-22 10:34:57
  • 4890

C++中数组与STL中vector和array的比较

ref:http://m.blog.csdn.net/article/details?id=49848169 在c++11中,STL中提拱了一个新的容器std::array,该容器在某些程度上替代了...
  • acelit
  • acelit
  • 2017-03-29 18:43:32
  • 3356

4.5 数组,模板类vector和array的比较

数组,模板类vector和array比较
  • u010236550
  • u010236550
  • 2013-11-17 14:14:22
  • 1856

C++ 数组转换vector

int arr[] = {1,2,3,4,5}; vector varr(arr, arr+5);
  • yang382197207
  • yang382197207
  • 2015-02-06 14:56:20
  • 4698
收藏助手
不良信息举报
您举报文章:数组的代替品——vector和array
举报原因:
原因补充:

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