使用指针符号c ++将数字插入数组

时间:2015-01-06 19:56:39

标签: c++ arrays pointers notation

所以我试图按升序将数字插入数组,然后仅使用指针表示法打印数组。我尝试通过找到数字插入位置的位置来尝试这样做,然后我尝试将所有值存储在该位置,然后存储在数组中的位置之后。然后我想在它正确的位置插入数字,然后将所有数字移回到它们的位置+ 1.然而,我想我的指针表示法中缺少一些东西,因为我的检查都没有出现,所以我的for循环甚至不被使用。任何帮助或建议将不胜感激。

using namespace std;
int main(int argc, char *argv[]) 
{
    int spot; // spot holder for the added number 
    int *pointer = NULL; 

    cout << "How many numbers do you want in your array" << endl; 
    int input; 
    cin >> input; 
    pointer = new int[input * 2 ];
    for (int index = 0; index < input; index ++)
    {
        cout << "Enter integer number" << index + 1 << endl; 
        cin >> *(pointer + index); 

    }
    for (int index = 0; index < input; index ++)
    {
        cout <<  *(pointer + index); 
    }
    cout << endl; 

    cout << "What number would you like to add?" << endl;
    int added; 
    cin >> added;  

    for (int index = 0; added < *(pointer + index); index++)
    {
        spot = index;  
        cout << "check .5: " << spot;
    }
    for (int index = spot; index < input + 1; index++)
    {
        *(pointer + input + index) = *(pointer + index); //& added 
        cout << "check 1: " << *(pointer + input + index); 
    }
    *(pointer + spot) = added; 
    for (int index = spot + 1; index < input + 1; index++)
    {
        *(pointer + index) = *(pointer + index + input); 
        cout << "check 2" ;
    }

    for (int index = 0; index < input + 1; index ++)
    {
        cout <<  *(pointer + index); 
    }
    cout << endl; 
}

1 个答案:

答案 0 :(得分:1)

这是一个演示程序,演示如何通过标准算法进行分配

#include <iostream>
#include <algorithm>

int main() 
{
    const size_t N = 5;
    int a[N] = { 2, 5, 1, 4, 3 };
    int b[N];

    int *first = b;
    int *last  = b;

    for ( int x : a )
    {
        auto p = std::upper_bound( first, last, x );

        if ( p != last )
        {
            std::copy_backward( p, last, last + 1 );
        }

        *p = x;
        ++last;
    }

    for ( int x : b ) std::cout << x << ' ';
    std::cout << std::endl;

    return 0;
}

输出

1 2 3 4 5 

方法是您需要按升序填充数组放置数字。在这种情况下,您应该使用二进制搜索方法来确定必须添加下一个数字的位置。然后你只需要从这个位置开始向右移动所有存在的元素。