Typ von vector ändern
-
Ja ne,
das ists nicht so richtig...
Danke dir aber trotzdem und laßt es gut sein... mir kommt das ganze auch merkwürdig vor....
Während ich das hier geschrieben hab ist mir aber ne Alternative eingefallen...mfg Ishi
-
@ Hacker
Das ist nicht das, wonach er gefragt hat.
-
icarus2 schrieb:
@ Hacker
Das ist nicht das, wonach er gefragt hat.Ich weiß. Wonach der gefragt hat, ist aber Schwachsinn. Man kann nicht einen Bezeichner resetten, oder den Typ eines Vectors ändern.
-
"Man kann einen Bezeichner nicht resetten" -> Genau das wollte ich wissen.
Habs mir aber eh schon gedacht...Also geht das was ich vorhatte nicht...
Danke!
-
Hacker schrieb:
icarus2 schrieb:
@ Hacker
Das ist nicht das, wonach er gefragt hat.Wonach der gefragt hat, ist aber Schwachsinn. Man kann nicht einen Bezeichner resetten, oder den Typ eines Vectors ändern.
Da gebe ich dir recht

-
icarus2 schrieb:
Hacker schrieb:
icarus2 schrieb:
@ Hacker
Das ist nicht das, wonach er gefragt hat.Wonach der gefragt hat, ist aber Schwachsinn. Man kann nicht einen Bezeichner resetten, oder den Typ eines Vectors ändern.
Da gebe ich dir recht

Wonach er fragt ist denke ich kein Schwachsinn. Es ist wahrscheinlich 'nur' ziemlich unglücklich formuliert.
Er möchte (vermute ich) den gleichen Algorithmus für verschiedene Datentypen aufrufen.
Dazu machst du aus deiner Funktion eine Template-Funktion und du kannst es für zwei Datentypen ausführen.
Vielleicht hilft dir folgendes weiter:
#include <iostream> #include <vector> struct Foo{ Foo(int i) : i(i) {} void foo() const{ std::cout << "foo() " << i << std::endl; } void say() const{ std::cout << "say foo() " << i << std::endl; } int i; }; struct Bar{ Bar(int i) : i(i) {} void bar() const{ std::cout << "bar()" << i << std::endl; } void say() const{ std::cout << "say bar() " << i << std::endl; } int i; }; void call_function(const Foo& f){ f.foo(); } void call_function(const Bar& b){ b.bar(); } template<class T> void foobar(const std::vector<T> vec){ for(typename std::vector<T>::const_iterator it=vec.begin(); it!=vec.end(); ++it){ it->say(); call_function(*it); // Ein zusätzlicher Funktionsaufruf, falls 'es nicht genau passt' } } int main(){ std::vector<Foo> vec1; vec1.push_back(Foo(1)); vec1.push_back(Foo(2)); std::vector<Bar> vec2; vec2.push_back(Bar(1)); vec2.push_back(Bar(2)); foobar(vec1); foobar(vec2); }Gruß,
XSpille
-
@XSpille
Ich bin mir 90% sicher dass der OP hier was machen will was man als groben Unfug bezeichnen könnte (sollte (müsste)).Ich gehe davon aus dass das Programm ca. so aussieht.
std::vector<float> Daten; void DatenEinlesen() { ... Daten.push_back(...); Daten.push_back(...); ... } void IrgendwasRechnen() { ... Daten[i] = ... Daten[j] ... ... } void IrgendwasAusgeben(); int main() { DatenEinlesen(); IrgendwasRechnen(); IrgendwasAusgeben(); }Und jetzt will er in IrgendwasRechnen mit double rechnen.
Und daher den Vektor "Daten" ("Element_List") transmutieren.
-
hustbaer schrieb:
Und daher den Vektor "Daten" ("Element_List") transmutieren.
Hä?
</tuaufdumm>Also, da gibt es doch eine Fülle von Möglichkeiten. Z.B. Zwei Vectoren machen, und eine Template-Methode.
-
@Hacker
Natürlich gibt es da einen Haufen (einfache) Möglichkeiten.Ich nehme oft das schlimmste an, und wenn ich damit falsch liege, dann bitte um Verzeihung im Voraus.
Ich gehe halt davon aus dass der OP a) nicht wirklich programmieren kann und b) unwillens ist den Bezeichner "Element_List" an allen Stellen in seinem Programm zu ändern (ist ja sooo viel Arbeit).
Und daher den Typ der "Element_List" zur Laufzeit ändern will - was in dynamisch typisierten Sprachen ja durchaus möglich wäre.
-
hustbaer schrieb:
Ich nehme oft das schlimmste an, und wenn ich damit falsch liege, dann bitte um Verzeihung im Voraus.
Ich gehe halt davon aus dass der OP a) nicht wirklich programmieren kann und b) unwillens ist den Bezeichner ...
Ja, so denk ich auch. Es ist mir nur peinlich das zuzugeben 