Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > ступенчатый массив


Автор: Helicopterr 31.10.2005, 20:19

Подскажите, как в С++ создать ступенчатый массив?
На С# (для примера) я делаю так:
Код

short[][] MYARRAY = new short[2][];
MYARRAY[0] = new short[1];
MYARRAY[1] = new short[2];
MYARRAY[2] = new short[3];

Но нужно на С++

Автор: Mayk 31.10.2005, 20:21

Код

short** myarray = new short*[3];
myarray[0] = new short[1];
myarray[1] = new short[2];
myarray[2] = new short[3];
...
delete[] myarray[0];
delete[] myarray[1];
delete[] myarray[2];
delete[] myarray;

Автор: nikf 31.10.2005, 20:22
Код

int** MYARRAY = new int*[3];
MYARRAY[0] = new int[1];
MYARRAY[1] = new int[2];
MYARRAY[2] = new int[3];

///
for(int i=0;<3;i++)
delete[] MYARRAY[i];

delete[] MYARRAY;

Автор: Helicopterr 31.10.2005, 20:26
так и думал! пасибо

Автор: Helicopterr 31.10.2005, 20:45
Oops, Mayk, nikf I have a trouble

error C2466: cannot allocate an array of constant size 0
error C2501: 'myarray' : missing storage-class or type specifiers
error C2372: 'myarray' : redefinition; different types of indirection
error C3861: 'myarray': identifier not found, even with argument-dependent lookup
...

Автор: Mayk 31.10.2005, 21:02
Это даже http://www.comeaucomputing.com/tryitout/ компилирует.
Покажи код smile

Автор: Helicopterr 31.10.2005, 23:04
Код

//интерполяция (С)Helicopterr 2005 VS.NET

#include <iostream>
#include <math.h>
using namespace std;
#define SIZEN 4
#define stepX 5

short X[]={5, 10, 15, 20, 25}, Y[]={4, 14, 20, 2, 8};
// YPS[SIZEN][SIZEN] - c 2-мерным работает нормально

// --------------------------------
// пробуем делать ступенчатый:
short** YPS = new short *[SIZEN];
 YPS[0] = new short[1];
 YPS[1] = new short[2];
 YPS[2] = new short[3];
 YPS[3] = new short[SIZEN];
// --------------------------------
extern short x=0;

__int64 razl (short si)
{
if (si<0) return 1;
return((x-X[si]) * razl(si-1));
}

__int64 factorial (short si)
{
if (si <= 1) return 1;
return(si * factorial(si-1));
}

__int64 interp ( short y, short si)
{
if (si < 0) return y;
return(y + interp((YPS[si][NULL] * razl(si) / (pow(stepX, si+1) * factorial(si+1))), si-1));
}


int main()
{ 
    
short si, sj, y, rectangle = SIZEN;

for(si=0; si < SIZEN; si++)
{
YPS[NULL][si] = Y[si+1] - Y[si];
}


for(sj=0; sj<SIZEN; sj++)
{ rectangle--;
for(si=0; si < rectangle; si++){
YPS[sj+1][si] = YPS[sj][si+1] - YPS[sj][si];
 
}}


for (x=5; x<=25; x = x + stepX)
{       
y = interp (Y[0], SIZEN);
cout<<"\t"<<y;
}
       
   return 0; 
} 

Автор: Mayk 1.11.2005, 09:03
нда.
запихни все YPS[n]=new short[n+1] в main.

Автор: Nwpaunsir 10.3.2013, 16:07
Можете подсказать?? Вот я написал часть кода и попробовал запустить но мне выдало ошибку при запуске(error C2372: 'M' : redefinition; different types of indirection)    Подскажите пожалуйста в чем я накосячил??


#include "stdafx.h"
#include "stdlib.h"
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
using namespace std;

int main()
{
    int tmp[4][4];
    int M[4];
     int *M=new int [4];
         delete [] M;

 system("pause");
    return 0;
}

Автор: Фантом 10.3.2013, 16:17
Там же на нормальном английском языке написано, в чем. Зачем Вы два раза объявили M?

Цитата(Nwpaunsir @  10.3.2013,  17:07 Найти цитируемый пост)
    int M[4];
     int *M=new int [4];


Автор: Nwpaunsir 10.3.2013, 16:28
спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)