关于数组的语法点还是很多的,基本数组,字符型数组,指针数组,还有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++标准模板类中的相应容器类也不少,我们只需要在合适的时候使用合适的容器和方法就行了。