# Array Größe zur Laufzeit bestimmen



## Dolphon (25. Oktober 2008)

Hi,

um die Array Größe zur Laufzeit zu bestimmen habe ich einen Zeiger benutzt.
Es funktioniert auch. Ich möchte nur gerne wissen, ob dies richtig so ist:


```
int _tmain(int argc, _TCHAR* argv[])
{
	int anzahl,i,min;
	int *zahl;
	float mittelwert=0;

	cout <<"Wie viele positive Zahlen wollen Sei einlesen?\n";
	cin >> anzahl;
	zahl = new int(anzahl);

 for (i = 0; i < anzahl; i++) 
  { 
	  cout << " Geben Sie die " << i << " Zahl ein: \n" ;
	  cin >> zahl[i];
  }...........
```

Gruß

Dolphon


----------



## Mickeyman (25. Oktober 2008)

Hallo,
so wie du es gemacht hast ist es falsch.
Du hast nämlich einfach nur einen Integer auf dem Heap abgelegt und ihn dann mit dem Wert von "Anzahl" initialisiert. Um daraus ein dynamisches Array zu machen, muss du einfach nur die runden Klammern durch Eckige ersetzten.
Vergesse aber nicht, den Speicher nachher wieder freizugeben! Dafür musst du dann den Operator "delete[]" verwenden. (Die Klammern dabei nicht vergessen)

Gruß, Mickeyman.


----------



## devDevil (2. November 2008)

Nja warum du hier noch unbedingt selbst Hand anlegen willst ...

```
#include <algorithm>
#include <iostream>

int main(int argc, char** argv)
{
    std::cout << "Wie viele positive Zahlen wollen Sei einlesen?\n";
    std::size_t size(0);
    std::cin >> size;
    
    unsigned int* ptr_array(new unsigned int[size]);
    // iteratoren anlegen (okay hier einfache Zeiger ;) )
    unsigned int* ptr_begin(ptr_array);
    unsigned int* ptr_end(ptr_array + size);

    for (unsigned int* ptr_it(ptr_begin); ptr_it != ptr_end; ++ptr_it) 
    { 
	  std::cout << "Geben Sie die " << std::distance(ptr_begin, ptr_it) << ". Zahl ein: \n" ;
	  std::cin >> *ptr_it;
    }

    unsigned int* ptr_min(std::min_element(ptr_begin, ptr_end));
    std::cout << "Kleinstes Element: " << *ptr_min << std::endl;

    delete [] ptr_array;
}
```
So geht das wenn du gerne auf Arrays zurückgreifen willst ... warum auch immer 


```
#include <algorithm>
#include <iostream>
#include <vector>

int main(int argc, char** argv)
{
    std::cout << "Wie viele positive Zahlen wollen Sei einlesen?\n";
    std::size_t size(0);
    std::cin >> size;
    
    std::vector<unsigned int> data(size);

    for (std::vector<unsigned int>::iterator it(data.begin()); it != data.end(); ++it) 
    { 
	  std::cout << "Geben Sie die " << std::distance(data.begin(), it) << ". Zahl ein: \n" ;
	  std::cin >> *it;
    }

    std::vector<unsigned int>::const_iterator it_min(std::min_element(data.begin(), data.end()));
    std::cout << "Kleinstes Element: " << *it_min << std::endl;
}
```
 ...


----------

