在数组中插入值

时间:2016-02-17 16:31:01

标签: c++ arrays c++11 insertion

我正在尝试插入一个值" item"在排序的线性阵列中位置" pos" 当我使用初始化列表获取数组中的输入时,代码工作正常..但是当我使用for循环获取输入时,代码不起作用

#include<iostream>
using namespace std;
int main()
{
const int size = 10;
int num[size];
int num[size] = {1,2,3,4,5,6,7,8,9,10}; //a sorted linear array
int item;
int pos;
int i;

/*

for(int a=0;a<size;a++)
{
    cin>>num[a];

}
*/

cout<<"Enter item"<<endl; //insert this item in array
cin>>item;
cout<<"Enter Position To Insert"<<endl;

cin>>pos;

i=size-1;
while(i>=pos)
{
    num[i+1]=num[i];
    i=i-1;
}
num[i+1] = item;

cout<<endl;
cout<<"array after insertion"<<endl;
for(int b=0;b<size;b++)
{

    cout<<num[b]<<endl;
}


system("pause");
return 0;
}

导致问题的for循环

for(int a=0;a<size;a++)
{
    cin>>num[a];

}

1 个答案:

答案 0 :(得分:0)

此代码段

i=size-1;
while(i>=pos)
{
    num[i+1]=num[i];
    i=i-1;
}
num[i+1] = item;

错了。首先pos可以大于或等于size在这种情况下,不应该在数组中插入任何元素。但是根据代码片段的最后一条声明

num[i+1] = item;

num[size]将与item进行分配。

再次在循环内,i的初始值等于size - 1,尝试分配num[size]元素

    num[i+1]=num[i];

可以通过以下方式重写代码段

if ( pos < size )
{
    i = size;

    while ( --i != pos ) num[i] = num[i-1];

    num[i] = item;
}