c++ 数组

数组

所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。

一、声明数组

type arrayName [ arraySize ];

这叫做一维数组。arraySize 必须是一个大于零的整数常量,type 可以是任意有效的 C++ 数据类型。

例如:一个类型为 double 的包含 10 个元素的数组 xx

double xx[10];

xx 是一个可用的数组,可以容纳 10 个类型为 double 的数字

二、初始化数组

( 1) int xx[5] = {11,22,33,44,55};      声明一个类型为 int 的包含 5 个元素的数组

(2) xx[4] = 55; ————>   把第 5 个元素的值 赋为 55

三、访问数组

 数组元素类型  名称 = 数组名[ 元素的索引  ];

如: 

int a[3] = {1,2,3};

int b = a[0];

int c = a[2];

//则,b = 1,c = 3;
#include <iostream>
using namespace std;
 
#include <iomanip>
using std::setw;
 
int main ()
{
   int n[ 10 ]; // n 是一个包含 10 个整数的数组
 
   // 初始化数组元素          
   for ( int i = 0; i < 10; i++ )
   {
      n[ i ] = i + 100; // 设置元素 i 为 i + 100
   }
   cout << "Element" << setw( 13 ) << "Value" << endl;
 
   // 输出数组中每个元素的值                     
   for ( int j = 0; j < 10; j++ )
   {
      cout << setw( 7 )<< j << setw( 13 ) << n[ j ] << endl;
   }
 
   return 0;
}

使用了 setw() 函数来格式化输出

结果:

 

 四、数组详解

多维数组 C++ 支持多维数组。多维数组最简单的形式是二维数组。
指向数组的指针 您可以通过指定不带索引的数组名称来生成一个指向数组中第一个元素的指针。
传递数组给函数 您可以通过指定不带索引的数组名称来给函数传递一个指向数组的指针。
从函数返回数组 C++ 允许从函数返回数组。

(1)多维数组

type name[size1][size2]...[sizeN]; 

例如,创建一个二维   3行   4列   整型数组:

int threedim[3][4];

初始化:

int a[3][4] = {  
 {0, 1, 2, 3} ,   /*  初始化索引号为 0 的行 */
 {4, 5, 6, 7} ,   /*  初始化索引号为 1 的行 */
 {8, 9, 10, 11}   /*  初始化索引号为 2 的行 */
};

or

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

//两个是等同的

访问:

a[x][y];

(2)指向数组的指针

 数组名是一个指向数组中第一个元素的常量指针

例如:double balance[50];

balance 是一个指向 &balance[0] 的指针,即数组 balance 的第一个元素的地址

因此,下面的程序片段把 p 赋值为 balance 的第一个元素的地址

double *p;
double balance[10];

p = balance;

访问数组元素:

  1. *(balance + 4)  ————>  访问balance[4]
  2. 一旦您把第一个元素的地址存储在 p 中,您就可以使用 *p、*(p+1)、*(p+2) 等来访问
#include <iostream>
using namespace std;
 
int main ()
{
   // 带有 5 个元素的双精度浮点型数组
   double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};
   double *p;
 
   p = balance;
 
   // 输出数组中每个元素的值
   cout << "使用指针的数组值 " << endl; 
   for ( int i = 0; i < 5; i++ )
   {
       cout << "*(p + " << i << ") : ";
       cout << *(p + i) << endl;
   }
 
   cout << "使用 balance 作为地址的数组值 " << endl;
   for ( int i = 0; i < 5; i++ )
   {
       cout << "*(balance + " << i << ") : ";
       cout << *(balance + i) << endl;
   }
 
   return 0;
}

结果:

在上面的实例中,p 是一个指向 double 型的指针,这意味着它可以存储一个 double 类型的变量。一旦我们有了 p 中的地址,*p 将给出存储在 p 中相应地址的值

补充:

(3)传递数组给函数

(4)从函数返回数组

  

 补充:

1.  Array 直接初始化 char 数组是特殊的,这种初始化要记得  字符是以一个 null 结尾的。 ————>  要给null 留位置

char a1[] = {'C', '+', '+'};          // 初始化,没有 null

char a2[] = {'C', '+', '+', ''};    // 初始化,明确有 null

char a3[] = "C++";                    // null 终止符自动添加
const char a4[6] = "runoob";          // 报错,没有 null 的位置

a4 是错误的,虽然 a4 包括 6 个直接字符,但是 array 大小是 7:6个字符 + 一个null。正确的是:

const char a4[7] = "runoob";

2. Array 是固定大小的,不能额外增加元素.当我们想定义不固定大小的字符时,可以使用 vector(向量) 标准库。 

#include <iostream>
#include <vector>
using namespace std;
 
int main() {
   // 创建向量用于存储整型数据
   vector<int> vec; 
   int i;

   // 显示 vec 初始大小
   cout << "vector size = " << vec.size() << endl;

   // 向向量 vec 追加 5 个整数值
   for(i = 0; i < 5; i++){
      vec.push_back(i);
   }

   // 显示追加后 vec 的大小
   cout << "extended vector size = " << vec.size() << endl;

   return 0;
}

vec 的大小随着 for 循环的输入而增大。

执行以上代码,输出结果:

vector size = 0
extended vector size = 5

3. setw(int n)控制输出间隔(n -1 个空格)

 4. 数组初始化时可以用聚合方法,但是赋值时候不可以用聚合方法

合法:
int array[] = {5,10,20,40};
不合法:
int array[];

int main()
{
  array[] = {5,10,20,40};
  return 0;
}

5. 

6. 数组的长度

#include<iostream>
using namespace std;

template<class T>

int length(T& arr)
{
    //cout << sizeof(arr[0]) << endl;
    //cout << sizeof(arr) << endl;
    return sizeof(arr) / sizeof(arr[0]);
}

int main()
{
    int arr[] = { 1,5,9,10,9,2 };
    // 方法一
    cout << "数组的长度为:" << length(arr) << endl;
    // 方法二
    //cout << end(arr) << endl;
    //cout << begin(arr) << endl;
    cout << "数组的长度为:" << end(arr)-begin(arr) << endl;
    system("pause");
    return 0;
}

结果: 6 6 

对于字符串数组,可以用 strlen() 函数来获取字符串数组的长度

7.Vector 

原文地址:https://www.cnblogs.com/expedition/p/11320164.html