一维数组
一维数组1
#include <iostream>
using namespace std;
// 全局变量,存在堆里
// 定义全局变量,全部默认为0,无论是数组还是变量
// 开的时候并不会全开,而是用到的时候就会开,并赋初值为0
int head[10000000];
int main()
{
// 1.定义数组
int a[100], b[10];
float c[20];
double d[10];
char e[14];
string g[25]; // 字符串数组 单个元素是一个字符串
// 2.数组初始化
int aa[3] = {0, 1, 3}; // 定义了一个长度为3的数组
int bb[] = {0, 1, 1}; // 定义了一个长度为3的数组
int cc[5] = {0, 1, 1}; // 定义了一个长度为5的数组,没有给出的值默认是0 {0, 1, 1, 0, 0}
char dd[] = {'a', 'b', 'c'}; // 定义了一个长度为3的字符数组
int ff[10] = {0}; // 将数组全部初始化为0的写法
// 3. 定义在main内部的变量的值,若不赋值,是随机的
int aaa[100];
for (int i = 0; i < 100; i ++) cout << aaa[i] << endl;
int bbb[100] = {0};
for (int i = 0; i < 100; i ++) cout << bbb[i] << endl;
// 4.所有在main里的变量是存在栈空间的,这个空间C++默认是1MB,网站进行了优化给了256MB
// 有时候容易报错,用到了这些变量就会存在栈里,开了就会占用空间,无论是否使用,因为栈里还有代码段
// 解决方式:定义在全局变量里,会存在堆空间,没有限制,但不能超过内存总限制
int aaaa[10000000];
for (int i = 0; i < 1000000; i ++) aaaa[i] = i;
for (int i = 0; i < 1000000; i ++) cout << head[i] << endl;
return 0;
}
一维数组2
#include <iostream>
using namespace std;
int main()
{
// 5.数组下标的访问
int a[100] = {0, 1, 2}; //数组下标一定从0开始
cout << a[0] << ' ' << a[1] << ' ' << a[2] << endl;
a[0] = 5;
cout << a[0] << endl;
}
练习1
/*
使用数组求斐波那契数列的第n项
*/
#include <iostream>
using namespace std;
int main()
{
int f[100];
f[1] = 0, f[2] = 1;
int n;
cin >> n;
for (int i = 3; i <= n; i ++)
{
f[i] = f[i - 1] + f[i - 2];
}
cout << f[n] << endl;
return 0;
}
练习2
/*
输入一个n,再输入n个整数,将这n个整数逆序输出
*/
#include <iostream>
using namespace std;
int main()
{
int a[100], n;
cin >> n;
for (int i = 0; i < n; i ++) cin >> a[i];
for (int i = n - 1; i >= 0; i --) cout << a[i] << ' ';
return 0;
}
练习3
/*
输入一个n,再输入n个整数。将这个数组顺时针旋转k(k<=n)次,最后将结果输出
eg
1 2 3 4 5旋转2次
①.5 1 2 3 4
②.4 5 1 2 3
*/
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[100];
int n, k;
cin >> n >> k;
for (int i = 0; i < n; i ++) cin >> a[i];
// 方法1 循环左移
// while (k --)
// {
// int t = a[n - 1];
// for (int i = n - 2; i >= 0; i --)
// {
// a[i + 1] = a[i];
// }
// a[0] = t;
// }
// 方法2 reverse
reverse(a, a + n);
reverse(a, a + k);
reverse(a + k, a + n);
for (int i = 0; i < n; i ++) cout << a[i] << ' ';
return 0;
}
练习4
/*
输入n个数,将这n个数按从小到大的顺序输出
*/
#include <iostream>
using namespace std;
int main()
{
int a[100], n;
cin >> n;
for (int i = 0; i < n; i ++) cin >> a[i];
// 交换排序 每次确定一个剩余数中的最小值(i)
for (int i = 0; i < n; i ++)
{
for (int j = i + 1; j < n; j ++)
{
if (a[j] < a[i]) swap(a[i], a[j]);
}
}
for (int i = 0; i < n; i ++) cout << a[i] << ' ';
cout << endl;
return 0;
}
练习5
/*
计算2的n次方 n<=10000
2的n次方的位数是log10(2^n)
*/
#include <iostream>
using namespace std;
// const是不可以修改的常量 当你这个变量不想改 定义成const
const int N = 5000;
int a[N], n;
int main()
{
a[0] = 1;
cin >> n;
int m = 1;
for (int i = 0; i < n; i ++)
{
int t = 0;
for (int j = 0; j < m; j ++)
{
t += a[j] * 2;
a[j] = t % 10;
t /= 10;
}
if (t != 0) a[m ++] = t;
}
for (int i = m - 1; i >= 0; i --) cout << a[i];
cout << endl;
return 0;
}
多维数组-一个数组 数组里的每个元素是一个数组
多维数组1
#include <iostream>
using namespace std;
int main()
{
int a[3][4];
/*
a[0]-a[0][0] a[0][1] a[0][2] a[0][3]
a[1]-a[1][0] a[1][1] a[1][2] a[1][3]
a[2]-a[2][0] a[2][1] a[2][2] a[2][3]
*/
for (int i = 0; i < 3; i ++)
{
for (int j = 0; j < 4; j ++)
{
a[i][j] = i + j;
}
}
for (int i = 0; i < 3; i ++)
{
for (int j = 0; j < 4; j ++)
{
cout << a[i][j] << ' ';
}
cout << endl;
}
// n维
int b[1][1][1][1][1][1][1][1][1][1][1][1][1] = {1};
cout << b[0][0][0][0][0][0][0][0][0][0][0][0][0] << endl;
return 0;
}
多维数组2
#include <iostream>
using namespace std;
int main()
{
// 多维数组初始化
int a[3] = {0, 1, 2};
// 有三维 每一维里是一个长度为4的数组
int b[3][4] = {
{1, 2, 3, 4},
{2, 2, 3, 4},
{3, 2, 3, 4}
};
for (int i = 0; i < 3; i ++)
{
for (int j = 0; j < 4; j ++)
{
cout << b[i][j] << ' ';
}
cout << endl;
}
return 0;
}
memset
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int a[10], b[10];
for (int i = 0; i < 10; i ++) cout << a[i] << ' ';
cout << endl;
for (int i = 0; i < 10; i ++) cout << b[i] << ' ';
cout << endl;
cout << sizeof a << endl; // 输出40 一共占40个字节 单位是字节 求某个数组占用的字节数量
// 从a地址开始,初始化sizeof a长度的数 memset(a, 0, 40)与下面是等价的
memset(a, 0, sizeof a); // 按字节赋值 这个数组一共有10个元素,40个字节,每个字节是00000000
// memset比for循环赋值快
for (int i = 0; i < 10; i ++) cout << a[i] << ' ';
cout << endl;
memset(b, 1, sizeof b);
// b[i] = 00000010 00000010 00000010 00000010
for (int i = 0; i < 10; i ++) cout << b[i] << ' ';
cout << endl;
memset(b, -1, sizeof b);
// b[i] = ffff ffff ffff ffff
for (int i = 0; i < 10; i ++) cout << b[i] << ' ';
cout << endl;
return 0;
}
memcpy
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int a[10], b[10];
for (int i = 0; i < 10; i ++) a[i] = i;
// 复制1
// for (int i = 0; i < 10; i ++) b[i] = i;
// 复制2
memcpy(b, a, sizeof a); // 将a数组复制到b数组 长度为a数组的字节数
for (int i = 0; i < 10; i ++) cout << b[i] << ' ';
cout << endl;
return 0;
}