dynamische Felder?
-
heo
gibt es in c++ eigentlich ein Möglichkeit dynamisch wachsende Felder zu benutzen oder hat jemand einen gute Implementierungsvorschlag?
btw kann [] überladen?
mfg
-
ja, man kann den operator überladen und es gibt so was wie vector oder diverse andere stl typen, die dynamisch wachsen
-
d3f3nd3r schrieb:
heo
gibt es in c++ eigentlich ein Möglichkeit dynamisch wachsende Felder zu benutzen oder hat jemand einen gute Implementierungsvorschlag?
Ja, gibt es - und ich habe sogar eine fertige Implementation für dich: std::vector<> oder std::deque<>.
btw kann [] überladen?
Kannst du - sogar mit einem beliebigen Datentyp als Index

-
Also such einfach mal danach ... es ist nicht schwer ... einfach den Heap nutzen und schon geht es

Und zum operator
template<typename T> class foo { T* m_data; std::size_t m_size; public: foo(std::size_t size) : m_size(size), m_data(new T[size]) {} ~foo() { delete [] m_data; } T const& operator[](std::size_t index) const { if (index >= m_size) throw std::out_of_range("index"); return m_data[index]; } T& operator[](std::size_t index) { if (index >= m_size) throw std::out_of_range("index"); return m_data[index]; } };...
foo<int> inst(100); inst[10] = 10; std::cout << inst[10] << std::endl;wobei jetzt natürlich die nicht-const Version des operators aufgerufen wird!
-
ja man könnte für jedes neues element einfach feld + 1 Speicher allocieren und dann die werte aus dem alten feld ins neue schreibn......
aber ich suche eine effizientere Methode !?
mfg
-
d3f3nd3r schrieb:
ja man könnte für jedes neues element einfach feld + 1 Speicher allocieren und dann die werte aus dem alten feld ins neue schreibn......
aber ich suche eine effizientere Methode !?
Vector oder andere STL-Container benutzen.
(D)Evil: Du erfindest das Rad gern jeden Tag neu, was?

-
LordJaxom schrieb:
(D)Evil: Du erfindest das Rad gern jeden Tag neu, was?

Eigentlich nich zum lachen!

-
ähm noch eine Frage, kann es sein dass man in einem vector keine zeiger speichern kann??
folgender code produziert darauffolgende Fehlermeldung :
#define p_d3string *d3string; #include <vector> #include <iostream> using namespace std; #include "classes/dstring/d3string.h" #include "classes/fs_operators/fs_operators.h" int main (void) { vector<p_d3string> v1;vector_test.cpp: In function ‘int main()’: vector_test.cpp:32: error: `*' cannot appear in a constant-expression vector_test.cpp:32: error: template argument 1 is invalid vector_test.cpp:32: error: template argument 2 is invalid vector_test.cpp:32: error: expected primary-expression before ‘>’ token vector_test.cpp:32: error: ‘v1’ was not declared in this scopefunzt das einfach nicht oder ist mein code fehlerhaft?
mfg
-
ähm noch eine Frage, kann es sein dass man in einem vector keine zeiger speichern kann??
Nein, das kann nicht sein.
1. verwende keine #define, sondern typedef. (allg. hinweis)
2. wie sieht die deklaration / definition von d3string aus? Auch ein template?
wenn ja, versuchs so:vector<p_d3string > v1;(mit space vor dem '>').
simon
-
Was issen das für ein Horror-Code?

Seit wann benutzt man in C++ Makros?
Seit wann verfrachtet man freiwillig einen Header in einen anderen Namespace?Brrr!

Und ja, man kann in einem Vector Pointer speichern. Wenn man aber schon in der ersten Programmzeile Mist baut, rächt sich das später!
#include "classes/dstring/d3string.h" #include "classes/fs_operators/fs_operators.h" // Standard-Header würde ich immer als letztes inkludieren... #include <vector> #include <iostream> using namespace std; // UNTER den Includes! int main (void) { vector<p_d3string*> v1; // ein Makro ist unsinnig... hau den Stern so reinDer Stern gehört rechts hin.
-
simon.gysi schrieb:
2. wie sieht die deklaration / definition von d3string aus? Auch ein template?
wenn ja, versuchs so:vector<p_d3string > v1;(mit space vor dem '>').
Das mit dem Space ist in einer ganz anderen Situation nötig. Hat nichts mit Pointern zu tun.
-
ja danke war ein denkfehler,
kein plan wieso ich nicht gleich
vector<d3string*> v1;genommen habe

war anscheinend gestern am abend ein bisschen verwirrt....
aber danke
und das sollte eigentlich nur ein testprogramm werden um mit der vector lib vertraut zu werden
-
Das mit dem Space ist in einer ganz anderen Situation nötig. Hat nichts mit Pointern zu tun.
Ja, stimmt
