我是靠谱客的博主 热情红牛,最近开发中收集的这篇文章主要介绍数组的替代品vector和array,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

数组的替代品vector和array

 

1. 模板类vector

  模板类vector类似于string类,也是一种动态数组。基本上,它是使用new创建动态数组的替代品。实际上,vector类确实是使用newdelete来管理内存,但这工作是自动完成的。示例:

#include <vector>
...
using namespace std;
vector<int> vi;
// create a zero-size array of int
int n;
cin >> n;
vector<double> vd(n);
// create an array of n doubles

  其中,vi是一个vector<int>对象,vd是一个vector<double>对象。
  一般而言,下面的声明创建一个名为vtvector对象,它可以储存n_elem个类型为typeName的元素:

vector<typeName> vt(n_elem);

  其中参数n_elem可以是整型常量,也可以是整型变量。


2. 模板类array

  vector类的功能比数组强大,但付出的代价是效率较低。如果需要长度固定的数组,使用数组是更佳的选择。有鉴于此,C++11新增了模板类array,它也位于名称空间std中。与数组一样,array对象的长度也是固定的,也使用栈(静态内存分配),而不是自由存储区,因此其效率与数组相同,但更方便,安全。示例:

#include <array>
...
using namespace std;
array<int, 5> ai;
// create array object of 5 ints
array<double, 4> ad = {1.2, 2.1, 3.43, 4.3};

  推而广之,下面的声明创建一个名为arrarray对象,它可以储存n_elem个类型为typeName的元素:

array<typeName, n_elem> arr;

  与创建vector对象不同的是,n_elem不能是变量。
  在C++11中,可将列表初始化用于vectorarray对象,但在C++98中,不能对vector对象这样做。


3. 比较数组、vector对象和array对象

// choices.cpp -- array variations
#include <iostream>
#include <vector>
#include <array>
using namespace std;
int main ()
{
// C, original C++
double a1[4] = {1.2, 2.4, 3.6, 4.8};
// C++98 STL
vector<double> a2(4);
// create vector with 4 elements
// no simple way to initialize in C98
a2[0] = 1.0 / 3.0;
a2[1] = 1.0 / 5.0;
a2[2] = 1.0 / 7.0;
a2[3] = 1.0 / 9.0;
// C++11 -- create and initialize array object
array<double, 4> a3 = {3.14, 2.72, 1.63, 1.41};
array<double, 4> a4;
a4 = a3;
// valid for array objects of same size
// use array notation
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;
//misdeed
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;
}

  下面是该程序的输出示例:

a1[2]: 3.6 at 0x7ffe05dc07c0
a2[2]: 0.142857 at 0xb87020
a3[2]: 1.63 at 0x7ffe05dc07e0
a4[2]: 1.63 at 0x7ffe05dc0800
a1[-2]: 20.2 at 0x7ffe05dc07a0
a3[2]: 1.63 at 0x7ffe05dc07e0
a4[2]: 1.63 at 0x7ffe05dc0800

  程序说明:
  首先,注意到无论是数组,vector对象还是array对象,都可以使用标准数组表示法来访问各个元素。其次,从地址可知array对象和数组存储在相同的内存区域(即栈)中,而vector对象存储在另一个区域(自由存储区或堆)中。第三,可以将一个array对象赋给另一个array对象;而对于数组,必须逐个元素复制数据。

最后

以上就是热情红牛为你收集整理的数组的替代品vector和array的全部内容,希望文章能够帮你解决数组的替代品vector和array所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部