数组总结
一、 知识点总结
-
一维数组:
直接赋值:a[10]={1,2,3,…,9};
不赋初值:随机值或0
全赋同一初值:a[10] = {0}; //或者更推荐用memset函数memset函数:memset(数组名,值,sizeof(数组名));//如:memset(a , 0 , sizeof(a)) -
二维数组:
(int a[5][6] )直接赋值:a[5][6] = {{},{},{},{},{},{}};
如果数组大小较大(10^6)需将其定义在主函数main()外面,原因是函数内部申请的局部变量来自系统栈,允许申请的空间较小;而全局变量来自静态存储区,允许申请的空间较大。 -
字符数组:
-
二维数组动态创建
根据输入的行row与列col,动态创建二维数组。
// 创建一个m*n的整型数组
int ** num = NULL;
num = new int *[m];
for( int i = 0; i < m; i ++ )
num[i] = new int [n];
常见错误:通常使用动态创建的时候是一维声明时,因而在非声明语句时的等号左值容易出错(好吧,我出错了>.<)如:**num = new int *[m],*num = new int [m]等等不胜枚举。记忆诀窍可以是第一次动态分配时,等号左侧为原来的变量名,不加任何或[];等号右侧为减少一个指针符,以此类推。 -
字符串输入,char型数组和string的区别
刚才遇见的问题是:将字符串中的空格替换为指定字符串。然而在C++下,string类也好,char型数组也好,都不支持直接的cin操作。另一方面,又不想止步于使用scanf,于是百度搜索结果如下。
// 输入两个字符串,都可包含空格符
char input[1000] = {0}, sub[1000] = {0};
cin.getline( input, 1000 );
cin.getline( sub, 1000 );
调用cin的函数getline即可,不保存换行符,如若需要可替换为get函数,则保留换行符。虽然这些知识好像在C++书里都有,但是不用真的忘了呀。 -
动态字符串的初始化问题
同样是解替换字符串的问题时遇见的,动态生成字符串时的初始化问题。我没有找到相应的库函数,而是改变思路,将初始化时申请的字符串空间扩大一位,在操作之后末尾位赋值。
// outlen 为输出字符串的长度
output = new char [outlen+1];
{
// 中间处理代码
}
output[outlen] = 0;
加上字符串尾,输出正常。
二、 应用及其可以解决的问题
1; 密码学、矩阵的变换、生物研究(细菌的繁殖)、扫雷游戏的计算雷数、做游戏、工程设计、数字的提取。
2; 字符串的输入输出、字符的提取、字符串的判断、数字的排序。
三、 感想
1, 通过数组的学习使我更加了解了循环的应用,以及数组的定义的重要性,还有可以解决的问题。
2, 在这一期的oj中,后面的题也是真的难,每一题都得想上好久,但是经过不懈的努力,总是会有成果的,虽然改了好几次,交了好几次,但是还是ac了。这个过程真的很爽,做出来之后的成功感也是贼爽。
3, 在后面的学习中,我会继续保持这种状态,努力的克服所遇到的困难,做好充足的自学,以代码充实自己,加油!!!