在数组中插入元素

时间:2014-08-11 12:45:39

标签: c++ arrays

我试图让这个程序从用户那里获取一个元素,然后由用户将它插入到make数组中(数组必须被排序) 但它没有正常工作

例如: 一个[4]

a[0]=1
a[1]=3
a[2]=5
a[3]=7

然后我插入>> 6

然后它就像这样

a[0]=1
a[1]=3
a[2]=5
a[3]=6
a[4]=3866936

数组最多可以包含100个元素

:|

这是一本书中的练习

#include<iostream>
#include<windows.h>
using namespace std;

void insert(int[], int&, int);

int main()
{
    const int maxsize = 100;
    int a[maxsize];
    cout << "build ur array\n";  Sleep(650);
    cout << "Enter the number of elements:";
    int n;
    cin >> n;

    for (int i = 0; i < n; i++)
    {
        cout << "a[" << i << "]=";
        cin >> a[i];
    }
    int k;
    cout << "Enter a new element:";
    cin >> k;
    n++;
    insert(a, n, k);
    for (int i = 0; i < n; i++)
        cout << "a[" << i << "]=" << a[i] << endl;
    system("pause");
 }



void insert(int a[], int& n, int x)
{
    for (int i = n - 1; a[i]>x; i--)
        a[i] = a[i + 1];
     for (int i = n; i <= n; i--)
     {
         if (x >= a[i])
         {
             a[i + 1] = x;
             break;
         }
     }

5 个答案:

答案 0 :(得分:3)

假设你知道你在做什么。没有人可以输入超过99,假设您将检查该值是否小于100,您在插入中只有一个错误:

a[i] = a[i+1];

应该是

a[i+1] = a[i];

完整的功能应该像这样适用于所有可能的情况:

void insert(int a[], int& n, int x)
{
    for (int i = n - 2; a[i]>x && i >= 0; i--)
        a[i+1] = a[i];
    for (int i = n-2; i >= 0; i--)
    {
        if (x >= a[i])
        {
            a[i + 1] = x;
            return;
        }
    }
    a[0] = x;
}

答案 1 :(得分:2)

由于您正在从数组边界(0 - 3)外部读取,因此您遇到了未定义的行为。您应该使用std::vector来表示动态大小的数组:

std::vector<int> vec;
vec.push_back(1);
vec.push_back(3);
vec.push_back(5);
vec.push_back(7);

然后:

vec.push_back(6);

稍后,如果您想对阵列进行排序,您可以这样做:

std::sort(vec.begin(), vec.end());

答案 2 :(得分:0)

使用STL的一些内容,您可以使用以下内容:

class SortedVector
{
public:
    using const_iterator = std::vector<int>::const_iterator;

    void insert(int value) {
        auto it = std::lower_bound(v.begin(), v.end(), value);
        v.insert(it, value);
    }

    const_iterator begin() const { return v.begin(); }
    const_iterator end() const { return v.end(); }

private:
    std::vector<int> v;
};

Live Example

  • std::vector是容器。
  • std::lower_bound找到要插入的位置(插入方式仍然有序)
  • std::vector::insert执行插入(元素移位)。

如果您不想使用std :: vector和我们的C-array:您可以使用:

void insert(int a[], int& n, int x)
{
    auto it = std::lower_bound(a, a + n, x);
    std::copy(it, a + n, it + 1);
    *it = x;
    ++n;
}

Live example

答案 3 :(得分:0)

你只需要记住数组的索引从0开始。当你想要4个元素数组int tab[4]时,你可以使用0到3 tab[0], tab[1], tab[2], tab[3]的索引来读/写元素值。元素tab[4]不是你的数组的一部分,当你想从你的这个地方读取元素时,你将获得已存在的值(你可以将它视为不可预测的随机值,但它不是真正的随机值)。

顺便问一下,你的问题是关于C语言。如果您使用的是C ++,请阅读std::arraystd::vector等容器

答案 4 :(得分:0)

  
    

&GT;     在prajmus的帮助下     我解决了这个问题     :

  
#include<iostream>
#include<windows.h>
using namespace std;

void insert(int[], int&, int);

int main()
{
const int maxsize = 100;
int a[maxsize];
cout << "build ur array\n";  Sleep(650);
cout << "Enter the number of elements:";
int n;
cin >> n;

for (int i = 0; i < n; i++)
{
    cout << "a[" << i << "]=";
    cin >> a[i];
}
int k;
cout << "Enter a new element:";
cin >> k;
n++;
insert(a, n, k);
for (int i = 0; i < n; i++)
    cout << "a[" << i << "]=" << a[i] << endl;
system("pause");
}



void insert(int a[], int& n, int x)
 {
 for (int i = n - 2; a[i]>x; i--)
    a[i+1] = a[i];

for (int i = n-1; i <= n; i--)
{
    if (x >= a[i])
    {   a[i + 1] = x;
        break;
}
}
 }