Array von Objekten konstruieren.
-
Alternativ gibts natürlich auch wieder ne boost Lösung für arrays statt vector

class MyObject { bool bBrain; public: MyObject ( bool bPresent ) { bBrain = bPresent; } }; int main() { boost::array<MyObject, 5> mo = boost::assign::listof(true).repeat(4,true); //bzw evtl. auch folgendes: boost::array<MyObject, 5> mo = boost::assign::repeat(5,true); }Bei letzterem bin ich nicht 100%ig sicher obs klappt, die Doku ist da etwas dürftig.
-
Oder wenns auch nach der Initialisierung sein darf:
std::fill(). Nachzuschauen auf www.cplusplus.com...Allerdings ist die Verwendung von STL-Containern (evtl.
std::tr1::arrayals Array-Wrapper) sicher keine schlechte Idee.
-
Ich würds lieber mit einer Schleife und Zeigern machen, also jedes Objekt einzeln mit new erzeugen. So ist jedes Objekt individuell inizialisierbar.
-
ich++ schrieb:
Ich würds lieber mit einer Schleife und Zeigern machen, also jedes Objekt einzeln mit new erzeugen. So ist jedes Objekt individuell inizialisierbar.
Dafür hast du sie dann nicht in einem Array, also nicht hintereinander im Speicher. Einzeinitialisierungen gehen auch mit boost::assign:
boost::array<MyObject, 5> mo = boost::assign::list_of(true),false,true,true,false;
-
pumuckl schrieb:
Einzeinitialisierungen gehen auch mit boost::assign:
boost::array<MyObject, 5> mo = boost::assign::list_of(true),false,true,true,false;1. Meinst du nicht so?
boost::array<MyObject, 5> mo = boost::assign::list_of(true)(false)(true)(true)(false);Der MSVC++ zumindest akzeptiert die Komma-Variante nicht. Mit Klammern gehts, aber da finde ich die ()()-Möglichkeit etwas schöner:
boost::array<MyObject, 5> mo = (boost::assign::list_of(true),false,true,true,false);2. Ist das bei PODs, wie
boost::arrayeines ist, unnötig, da dort die Aggregatsinitialisierungsliste verwendet werden kann. So kann man nämlich direkt initialisieren und muss sich keine Gedanken um die zweifelhafte Wegoptimierung des temporären Containers machen.
boost::array<MyObject, 5> mo = {true, false, true, true, false};
-
pumuckl schrieb:
Dafür hast du sie dann nicht in einem Array, also nicht hintereinander im Speicher.
Ich habe die Zeiger auf die Objekte hintereinander im Speicher:
MyObject* my_object_array[N]; for ( int i=0; i<N; i++ ) my_object_array = new MyObject ( ... /* Individuelle Konstruktion */
-
nein - die objekte an sich befinden sich eben _nicht_ hintereinander im speicher - lediglich die pointer darauf befinden sich hintereinander im speicher:
array: _____ eins ---- / | 0| ----+-------- null | 1| ----´ | .| . | .| . ___ n | .| . | | N| ------´ ----noch dazu, muss N zur compile-zeit bekannt sein...
bb
edit: und außerdem musst du dich ums freigeben auch noch selbst kümmern... alles in allem eine höchst unkomfortable lösung, die mind. fehleranfälliger und langsamer(je nach dem, was du willst) etc. sein wird...
-
unskilled schrieb:
nein - die objekte an sich befinden sich eben _nicht_ hintereinander im speicher - lediglich die pointer darauf befinden sich hintereinander im speicher:
ich++ schrieb:
Ich habe die Zeiger auf die Objekte hintereinander im Speicher:

-
ich++ schrieb:
unskilled schrieb:
nein - die objekte an sich befinden sich eben _nicht_ hintereinander im speicher - lediglich die pointer darauf befinden sich hintereinander im speicher:
ich++ schrieb:
Ich habe die Zeiger auf die Objekte hintereinander im Speicher:

Verwirrung im Strafraum.

-
Gelling schrieb:
ich++ schrieb:
unskilled schrieb:
nein - die objekte an sich befinden sich eben _nicht_ hintereinander im speicher - lediglich die pointer darauf befinden sich hintereinander im speicher:
ich++ schrieb:
Ich habe die Zeiger auf die Objekte hintereinander im Speicher:

Verwirrung im Strafraum.

oh verdammt
waren aber wenigsten drei kurze wörtchen, die ich da überlesen hab 
naja - die anderen nachteile bleiben...
ich geh dann mal besser ;o)bb