C++数组
  TEZNKK3IfmPf 2023年11月12日 15 0

C++数组

C++数组(array)是一种顺序容器sequence container,是由单一数据类型元素组成的一个有序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。对数组元素的访问是通过下标(subscript)操作符,按元素在数组中的位置进行访问,称为索引访问(indexing)或下标访问(subscripting)。数组是一种组合类型,是不能作为一个整体进行访问和处理的,只能按元素进行个别的访问和处理。

C++中的一维数组

声明数组

在C++在声明一个数组,需要指定元素的类型和元素的数量,格式如下:

数据类型 数组名[元素数量];

上面声明的格式是一维数组的声明,其中元素个数必须是一个大于0的整型常量,数据类型可以是任意有效的C++数据类型。如声明一个类型为double的包含10个元素的数组myA,声明语句是: double myA[10];

注意,数组以 0 作为它们第一个元素的索引,也被称为基索引,数组的最后一个索引是数组的总大小减去 1。

初始化数组

在C++中,可以逐个初始化数组,也可以使用一个初始化语句,如下所示:

double myA[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

大括号{ }之间的值的数目不能大于在数组声明时在方括号[ ]中指定的元素数目。

如果省略掉了数组的大小,数组的大小则为初始化时元素的个数。因此,如果是下面的格式,将创建一个数组,它与前一个实例中所创建的数组是完全相同的

double myA[] = {1000.0, 2.0, 3.4, 7.0, 50.0};

为数组中某个元素赋值的实例,下面的语句把数组中第五个元素的值赋为666.6。所有的数组都是以0作为它们第一个元素的索引,也被称为基索引,数组的最后一个索引是数组的总大小减去1。

myA[4] = 666.6;

访问数组元素

数组元素可以通过数组名称加索引进行访问。元素的索引是放在方括号内,跟在数组名称的后边。例如:

double salary = myA[3];

声明数组、初始化数组、访问数组元素实例如下:

#include "iostream"
#include "iomanip"

using namespace std;
using std::setw;   //  setw() 函数来格式化输出

int main(){
    int a[10];   // 声明一个包含10个元素的整型数组
    // 初始化数组
    for (int i = 0; i < 10; i++)
        a[i] = i + 100;

    cout << "元素索引" << setw(13) << "元素值" << endl;
    // 输出数组中的每个元素
    for (int j = 0; j < 10; j++)
        cout << setw(7) << j << setw(13) << a[j] << endl;

    return 0;
}

运行之,参见下图:

C++数组

 

 

C++中的多维数组

C++支持多维数组。多维数组声明的一般形式如下:

    数据类型名 数组名[size1][size2]...[sizeN];

例,下面的声明创建了一个三维整型数组:

int tridim[5][10][4];

 

二维数组

多维数组最简单的形式是二维数组。一个二维数组,在本质上,是一个一维数组的列表。声明一个x行y列的二维整型数组,形式如下:

数据类型 数组名[x][y];

例、定义一个整型的包含3行和4列的二维数组:

int a[3][4]

一个二维数组可以被认为是一个带有x行和y列的表格。对于int a[3][4] 这个3行(Row)和4列(Column)的二维数组,示意如下:

C++数组

 

 

数组中的每个元素是使用形式为a[i][j]的元素名称来标识的,其中a是数组名称,i和j 是唯一标识a中每个元素的下标。

 

初始化二维数组

int a[3][4] = {

  {0, 1, 2, 3},   /*  初始化索引号为 0 的行 */

  {4, 5, 6, 7},   /*  初始化索引号为 1 的行 */

  {8, 9, 10, 11}, /*  初始化索引号为 2 的行 */

};

内部嵌套的括号是可选的,下面的初始化与上面是等同的:

int a[3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};

访问二维数组元素

二维数组中的元素是通过使用下标(即数组的行索引和列索引)来访问的。例如:

int val = a[2][3];

 

例、使用嵌套循环来处理前面定义的二维数组:
#include <iostream>
using namespace std;
 
int main ()
{
   // 一个带有 3 行 4列的数组
   int a[3][4] = {
      {0, 1, 2, 3},   /*  初始化索引号为 0 的行 */
      {4, 5, 6, 7},   /*  初始化索引号为 1 的行 */
      {8, 9, 10, 11}, /*  初始化索引号为 2 的行 */
    };

    // 输出数组中每个元素的值                      
   for ( int i = 0; i < 3; i++ )
      for ( int j = 0; j < 4; j++ )
      {
         cout << "a[" << i << "][" << j << "]: ";
         cout << a[i][j]<< endl;
      }
 
   return 0;
}

运行之,参见下图:

C++数组

C++数组的动态建立及输入

这涉及到vector容器的使用,故简要介绍之。vector容器:能够存放任意类型的动态数组,常用基本操作:     

1)头文件#include<vector>

2)创建一维vector对象,vector<int> vec;二维vector<vector<int>> vec2;

3)尾部插入数字:vec.push_back(a);

4)尾部元素弹出:vec.pop_back();相当于删除尾部元素。

5)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的,和数组的访问形式一样。

6)插入元素:vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a。

7)删除元素:vec.erase(vec.begin()+2);删除第3个元素。

  vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始。

8)向量大小:vec.size()。

9)清空:vec.clear()。

10)初始化赋值:

   vector c1(c2)      // 复制一个vector(c2也是一个vector)

   vector c(n)        // 创建一个vector,含有n个数据,数据均已缺省构造产生

   vector c(n, elem)  // 创建一个含有n个elem元素的vector

   vector c(beg,end)  // int array[]={1,2,3},beg=array,end=array+3,用数组为vector赋值

11)判断是否为空:vec.empty()。


先看一维数组的动态建立及输入,并输出验证的例:
#include <iostream>
#include <vector>

using namespace std;

int main(){
    vector<int> vector1;
    int inputnum=0;
    cout << "数组元素个数:";
    cin >>inputnum; 

    int temp = 0;
    cout << "数组元素值:";
    for (int i = 0; i < inputnum; i++)//输入一维数组
    {
        cin >> temp;
        vector1.push_back(temp);
    };
    
    //输出验证 
    for (int i = 0; i < inputnum; i++)//打印输入的数组 
    {
        cout << vector1[i] << " ";
    }
   
    return 0;
}

运行之,参见下图:

C++数组

 

再看二维数组的动态建立及输入,并输出验证的例:
#include <iostream>
#include <vector>

using namespace std;

int main(){
    int r = 0, c = 0;
    cout << "row:";
    cin >> r; //输入二维数组的行数
    cout << "col:";
    cin >> c;//输入二维数组的列数

    vector<vector<int> >array;//定义二维数组
    vector<int>v;//定义一维数组
    array.clear();//将二维数组清空,即初始化
    int temp = 0;
    cout << "数组元素值:";
    for (int i = 0; i < r; i++)//输入r*c的二维数组
    {
        v.clear();//子数组返回时要清除
        for (int j = 0; j < c; j++)
        {
            cin >> temp;
            v.push_back(temp);
        }
        array.push_back(v);
    }
    
    //输出验证
    for (int i = 0; i < r; i++)//打印输入的二维数组
    {
        for (int j = 0; j < c; j++)
        {
            cout << array[i][j] << " ";
        }
        printf("\n");
    }
   
    return 0;
}

运行之,参见下图:

C++数组

 

 

最后,简单介绍三维数组。

array[a][b][c]

如何理解三维数组含义:可以理解为该数组有a页,每一页都有一个b行c列的二维数组。参见下图:

C++数组

声明三维数组,如:

int myarray[2][3][4];

 

初始化数组:

int arr[2][3][4] =  {1, -1 ,2 ,-2 , 3 , -3, 4, -4, 5, -5, 6, -6,

        7,-7,8,-8,9,-9,10,-10,11,-11,12,-12};

 

三维数组示例

#include <iostream>

using namespace std;

 

int main(){

   // initializing the array

   int arr[2][3][4] =  {1, -1 ,2 ,-2 , 3 , -3, 4, -4, 5, -5, 6, -6,

        7,-7,8,-8,9,-9,10,-10,11,-11,12,-12};

   // displaying array values

   for (int x = 0; x < 2; x++) {

       cout <<"第"<< x << "层"<< endl;

      for (int y = 0; y < 3; y++) {

          for (int z = 0; z < 4; z++) {

            cout<<arr[x][y][z]<<" ";

         }

      cout << endl;  

      }

   }

   return 0;

}

 

运行之,参见下图:

C++数组

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: C++函数 下一篇: C++的数据类型
  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   17天前   22   0   0 C++
  TEZNKK3IfmPf   17天前   21   0   0 指针C++
  TEZNKK3IfmPf   2024年05月31日   21   0   0 算法C++
TEZNKK3IfmPf