2017-05-28 2 views
-3

Es dauerte eine Weile, bis ich herausgefunden hatte, wie ich ein Array der Datenstruktur erstellen konnte, die ich erstellt hatte. Ich dachte irgendwann, es muss ein Zeiger sein, aber warum?C++ Struct Array - Warum muss es ein Zeiger sein?

struct Food{ 
int weight; 
double price; 
string name; 
}; 

Food *foods = new Food[5]; // Why a pointer? 

Antwort

4

Da new[] reserviert einen Teil des Speichers, und gibt Ihnen einen Zeiger auf diesen Speicher. Im Fall von new Food[5] wird Platz für fünf Objekte vom Typ Food sein, die jeweils standardmäßig konstruiert sind. Der Zeiger, den Sie erhalten, ist zum ersten Food Objekt der fünf.

Sie können auch

Food foods[5]; 

verwenden, um ein Array zu erstellen.

jedoch die bevorzugte Art und Weise „Arrays“ in C++ zu erstellen, ist entweder std::array zu verwenden, oder wenn Sie ein dynamisches Array benötigen (oder sie müssen auf dem Heap sein) std::vector:

std::array<Food, 5> foods; // Create a static fixed-size array of 5 Food objects 

std::vector<Food> foods(5); // Create a dynamic, expandable array of 5 Food object 
+0

können Sie std :: array angeben oder warum std :: vector over new [] –

0

Sie don‘ t notwendigerweise es braucht einen Zeiger zu sein, können Sie leicht einen globalen/lokale Array schaffen könnten:

Food foods[5]; 

Wenn auf Heap, Arrays von variadische Länge sein kann:

Food *foods = new Food[std::rand() + 1]; 

Aber man muss sie als Arrays löschen ausdrücklich:

delete[] foods; // otherwise they leak 

Die meiste Zeit ist es sinn Container der STL zu nutzen macht:

#include <vector> 
#include <array> 

std::vector<Food> foods(5, cheezeburger()); // in case we need more cheeseburgers 
std::array<Food, 5> foods; // in case five cheeseburgers should be enough for everyone 

Sie werden für Sie alle lästigen Speicherverwaltung tun .

STL automatische Zeiger sind auch bekannt, Arrays auf dem Haufen.