Member 13057504 Ответов: 1

Как инициализировать динамический целочисленный массив с 0 при использовании нового указателя в C++?


#include<iostream>
using namespace std;
class peak
{
    int n,*p,*q;
public:
    void get()
    {
        cout<<"\nenter how many elements u want in array";
        cin>>n;
    }
    void create()
    {
        p=new int[n];
        q=new int[n];
    }
    void find();
    void show();
    void input();
    void del()
    {
        delete []p;
        delete []q;
    }
};
void peak:: find()
    {
        int j=0,i=1;
        if(p[0]>p[1])
            q[j++]=p[0];
        for(i=1;i<n-1;i++)
        {
            if(p[i]>p[i-1] && p[i]>p[i+1])
                q[j++]=p[i];
        }
        if(p[i]>p[i-1])
            q[j]=p[i];
    }
    void peak::show()
    {
        cout<<"\nthe peak elements are:";
        for(int i=0;i<n;i++)
            //showing different garbage for *(q+i):6750404 and q[i]:3080388
            cout<<q[i]<<"\t";
    }
    void peak::input()
    {
        cout<<"\nenter elements ";
        for(int i=0;i<n;i++)
            cin>>p[i];
    }
    int main()
    {
        peak p;
        p.get();
        p.create();
        p.input();
        p.find();
        p.show();
        p.del();
        return 0;
    }


Что я уже пробовал:

выражение:
p=new int[n](0) не работает так, как при динамическом выделении одного целого числа, как:p=new int(25);
кроме того, вывод приведенной выше программы для n=4 и записей:5 10 20 15 является:
20 мусор 0 0
требуемый выход:20 0 0 0
для того же кода, если n=7 с записями: 10 20 15 2 23 90 67-это:
20 90 0 0 0 0 0 что является необходимым выходом без какого-либо мусора!
почему так?просьба помочь.

1 Ответов

Рейтинг:
11

CPallini

Цитата:
Как инициализировать динамический целочисленный массив с 0 при использовании нового указателя в C++
Видеть здесь: инициализация-как инициализировать память с помощью нового оператора в C++? - переполнение стека[^].

На моей Linux-системе, программа предоставляет ожидаемых результатов.


Member 13057504

ptr=new int[n] () работает для инициализации динамического массива по умолчанию с 0.но если я хочу инициализировать массив каким-то другим числом/символом (в случае строки), Есть ли другой способ, кроме инициализации с помощью цикла?синтаксис инициализации: ptr=new int[n](25) недопустим и показывает ошибку!

CPallini

Насколько я знаю,вы должны повторить.