关于数组的语法点还是很多的,基本数组,字符型数组,指针数组,还有C++标准库中的关于数组的容器,今天只简单总结下,关于C++中数组的声明和使用的一些细节。
1、一维数组
#include<iostream>
using namespace std;
void main()
{
int myArray1[4] = { 1, 2, 3, 4 }; //常用的方式
int myArray2[4] = {}; //可以不设定初值,就默认数组中全为0
int myArray3[] {1, 2, 3, 4}; //在[]中可不写数组长度,但必须给该数组初值,C++会根据你给的数组初值分配相应的空间
//在这里myArray3的数组长度就是4,索引为0~3
double myArray4[12]{1.1, 2.23, 3.4}; //也可以不写等号
cout << myArray1[0] << endl; //数组的索引从0开始
cout << myArray2[1] << endl;
cout << myArray4[10] << endl; //没被赋值的部分也都为0
myArray1[0] = 99; //可通过索引改变数组中对应的值
cout << myArray1[0] << endl; //输出值为99
//以下都是错误操作
cout << myArray1[10] << endl; //error 当我们访问的索引超出了该数组的边界时,C++也不会报错,但这样做是错误的
myArray1 = myArray2; //直接将一个数组变量的赋值给另一个数组变量时错误的
}
2、多维数组
#include<iostream>
using namespace std;
void main()
{
//初始化多维数组,这是一个3行4列的多维数组,格式我这样写只是为了美观
int myArrys1[3][4]
{
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }
};
for (int i = 0; i < 3; i++) //循环3次,即3行
{
for (int j = 0; j < 4; j++) //循环4次,即4列
{
cout << myArrys1[i][j] << " "; //可以想象成有个3行4列的表格,我们从左向右,从上到下输出每个格子中的值
}
cout << endl; //每输出完一行换行
}
}
3、字符型数组
#include<iostream>
#include<string> //为了可以操作string而引入的C++的string类
using namespace std;
void main()
{
//以这种方式写的字符型数组一定要加'\0',表示字符结束,当然不写的话你也可以看看输出了什么
char name[] {'M', 'r', ' ', 'S', 'u', 'X', 'i', '\0'};
//字符型数组可直接输出数组中的所有内容,
cout << name << endl;
int a[4]{1, 2, 3, 4};
//如果是数值型数组,不写索引直接输出会输出一串十六进制,这是该数组在内存中的地址
cout << a << endl;
//这种方式更加简便且不用加'\0'
char chArray[]{"My name is SuXi"};
cout << chArray << endl;
//这里说下C++的标准库中有专门针对字符串而写的容器string,有很多操作方法,大家可以自行去查看和学习
string myStr = "This is the best";
cout << myStr;
}
关于cin输入流输入字符串的一些问题:
#include<iostream>
using namespace std;
void main()
{
//char chArray1[20]{};
//cin >> chArray1; //这里我输入Mr SuXi
//cout << chArray1 << endl; //最终只输出了Mr,因为提取运算符>>默认输出终止符为空格、制表符Tab和回车,
//在我敲击空格时cin就不在接收输入了
char chArray2[20]{};
//这里我们用getline()函数,第二个参数为限定的输入长度
cin.getline(chArray2, 20);
cout << chArray2 << endl; //可以得出完整的一行字符串
//此时只有输入*时再按回车才会结束输入,因此可一下子输出多行字符串
cin.getline(chArray2, 20, '*');
cout << chArray2 << endl; //可以得出完整的一行字符串
}
4、数组的替代品
原生态的数组很不方便,定义的时候就要设定好设定数值长度,之后就无妨修改这个数组的容量,同时访问数组中的数值只能用索引的方式,完全不灵活,然而C++的标准模板库中有数组的替代品也就是关于数组的容器类,更容易操作,安全性高,灵活性也更大,这里只简要介绍下。
#include<iostream>
#include<array> //引入C++标准模板库中的array类,才可以操作array容器
using namespace std;
void main()
{
//使用array容器时,<>中传递数据类型和数组长度
array<int, 10> myArray = { 1, 2 };
//可直接输出数组的长度
cout << myArray.size() << endl;
//fill()函数可以将数组中的所有值变为你传递进去的值
myArray.fill(29);
for (int i = 0; i < myArray.size(); i++)
{
cout << myArray[i] << " ";
}
}
array为固定长的容器,即在定义时必须要设定长度,虽然感觉和原始的数组没什么太大却别,但可以提高安全性,这个在初学阶段感觉不到,还有array提供很多方便的操作数组的方法,大家可以去去试试。
下面的vector容器就灵活多了,它是长度可变的,光是这一项能力就让它可以解决我们很多编程问题。
#include<iostream>
#include<vector> //引入C++标准模板库中的vector类,才可以操作vector容器
using namespace std;
void main()
{
//定义时只需传递数据类型
vector<int> list;
//通过该函数向我们的数组中插入数据,这是list的长度和容量都会增加
list.push_back(123);
cout << "数组长度为:" << list.size() << " 容量为: " << list.capacity() << endl;
list.push_back(999);
//可以看到长度和容量都增长了
cout << "数组长度为:" << list.size() << " 容量为: " << list.capacity() << endl;
cout << list[0] << " " << list[1] << endl;
}
关于C++数组方面的内容很多,C++标准模板类中的相应容器类也不少,我们只需要在合适的时候使用合适的容器和方法就行了。