Tablice Dynamiczne

0

Witam wszystkich.
Mam tu programik który ma stworzyć tablice dynamiczną zawierającą dodatnie elementy tablicy dane o rozmiarze n , funkcja ma też zwrócić jej adres. A więc zrobiłem o to taki programik:

#include <iostream>


using namespace std;
int *tablica(int dane[],int n){
	int x=0;
	int *tablica;
	tablica=new int [x];
	for (int i=0;i<n;i++){
		x++;
		if(dane[i]>0)
		tablica[x]=dane[i] ;
		
		else x--;
		
	}
	for (int i=0;i<=x;i++){
		
		cout<<"tablica;"<<tablica[i]<<endl;
		
	}
	
	return tablica;
}


int main() {
	
	int dane[10]={2,5,6,5,123,-5,5,-12,3,43};
	tablica(dane,10);
	return 0;
} 

Problem w tym że nie wiem jak inaczej to napisać by program zaczynał przypisywanie elementów do tablica[0] , bo jak widać przypisywanie zawsze zaczyna się od tablica[1] a w tablica[0] wywala jakieś liczby z kosmosu .Wiem że wypisywanie mogę zrobić inaczej:

 for (int i=1;i<=x;i++){
		
		cout<<"tablica;"<<tablica[i]<<endl;
		
	}

wtedy to dobrze wygląda ale mi by zależało na tym aby przypisywanie zaczynało się od tablica[0]. Wydaje mi się że da się to jakoś inaczej napisać tylko nie mam pojęcia jak :-( .Był bym wdzięczny jak by ktoś dał mi wskazówkę jak to pozmieniać. Dodam jeszcze że dopiero jestem na etapie uczenia się wskaźników.

2
int x=0;
new int [x];

Jak myślisz, co tutaj się dzieje i na ile elementów alokujesz pamięć?

Tak przy okazji - jeśli to nie jest w celu nauki - użyj std::vector zamiast wymyślać koło od nowa.

0
for (int i=0;i<n;i++){
        x++;
        if(dane[i]>0)
        tablica[x]=dane[i] ;

        else x--;

    } 
  1. Wchodzimy do pętli.
    a) i = 0;
    b) x = 0;
  2. Pętla
    a) dodajemy do x += 1;
    - x = 1;
    b) Jeżeli element tablicy o indeksie i jest > 0 wtedy zapisujesz to do nowej tablicy o indeksie x (który jest równy 1)
    Powinieneś zrobić tak:
#include <iostream>
#include <vector>
using namespace std;

void tablica(int Data[], size_t nSize, vector<int> &vVect){
    for(int n=0; n<nSize; ++n)
     if(Data[n] > 0)
      vVect.push_back(Data[n]);
    for(auto &val : vVect)
     cout << val << " ";
}

int main() {
    int Data[10]={2,5,6,5,123,-5,5,-12,3,43};
    vector<int> vVect;
    tablica(Data, 10, vVect);
    return 0;
}
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1