如何把一个数插入一堆数组中
1、本文的例子:在一个有着10个数字的一维数组中第五位插入一个数字。
使用语言:C++。
开发工具:Dev-C++或者Devcpp
如果您不熟悉Dev-C++的使用的话,可以参考我的另一篇经验。
1、我们都知道数组的大小在定义时是固定的,而且数组的元素的位置是固定的。因此如果想要在一个现有数组中插入一项数据的话,首先你需要保证数组的大小足够大,其次你需要将插入数据位置的后面所有数据向后移动。
我们来看看演示。

2、上面的演示中,我们预先了一个有着11个空间的数组,数组的前10个空间都有一个数字,分别是1到10。现在有一个数字11需要插入到第5个位置。
第一步,先将5到10的6个空间向后移动一位。

3、我们再来看看移动后的情况是什么样的。

4、既然位置已经空出来了,我们直接将数字10填入空出来的地方就行了。

5、下面就是编写代码来实现这个功能了。代码如下:
#include <iostream>
using namespace std;
//函数printarray是为了将数组输出
void printarray(int *arr)
{
for(int i=0;i<11;++i)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
int main(int argc, char** argv)
{
int arr[11]={1,2,3,4,5,6,7,8,9,10};
for(int i=10;i>3;--i)
{
arr[i]=arr[i-1];
cout<<"第"<<i<<"位数拷贝到第"<<i+1<<"位数的位置 " ;
printarray(arr);//输出每一次移动以后数组内的实际情况
}
arr[4] =11;
cout<<"\n最终结果为:" <<endl;
printarray(arr);
return 0;
}
可以看到我们成功实现了要求。

1、方法一时,我们在定义数组的时候预先多留了一个位置。那么假如我们定义时只定义了10个空间怎么办。难道还按照方法一去做吗?如果你真的去这么做了或许也会得到正确的结果,但是迟早有一天会出错的,因为你超出数组的空间去写数据很有可能会对其他有用数据造成破坏,严重者导致其他程序崩溃或者系统崩溃。所以不要那么去做。那该怎么办呢?
还是先来看看演示吧!

2、首先,我们需要给11个数字找到足够的空间。显然原来的10个空间是不够的。那么只能另找一块地方了。
就是动态的向系统申请一块能够放下11个数字的空间,注意这里的11个空间与预先定义的那10个空间是不同的,它们在内存中的位置差别很大。如果您想要详细了解的话,请百度搜索“应用程序内存分配”关键字来学习。
这里我可以告诉您的是,我们预先定义的10个空间是在程序的栈区,而动态申请的11个空间是在堆区。

3、那么空间找到了,该怎么插入数字11呢。
我们先将1-10这10个数字分开拷贝纸至新的空间。

4、最后再将11放入新空间的第五个位置。

5、好,我们可以开始写代码了。代码如下:
#include <iostream>
#include <string.h>
using namespace std;
//函数printarray是为了将数组输出
void printarray(int *arr)
{
for(int i=0;i<11;++i)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
int main(int argc, char** argv)
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
//采用new操作法来动态申请11个Int的内存,如果是C语言需要用malloc来分配
//C语言:int *newarr=(int*)malloc(11*sizeof(int))
int *newarr=new int[11];
memset(newarr,0,44);//是为了将申请到的内存全部清0,否则输出时会有垃圾数据
for(int i=0;i<10;++i)
{
if(i>=4)
{
newarr[i+1]=arr[i];
}
else
{
newarr[i]=arr[i];
}
printarray(newarr);//打印输出每一次移动后的newarr数组
}
newarr[4] =11;
cout<<"\n最终结果为:" <<endl;
printarray(newarr);
return 0;
}
结果也是正确的,非常好。

1、从两种方式的运行效率来看,因为第二种要动态申请内存,移动的数字也较多,显然效率要低不少。本例的数组小所以几乎没有影响。如果您在今后使用中要注意这个问题。同时动态内存的使用要比第一种方便灵活的多,也更好用。
最后,数组操作的安全性以及操作使用上可以用标准模板库的各种容器来实现,相比起来标准模板库更加安全性能更好,更易操作使用。