atof und vector<string>
-
carmen schrieb:
und wie würde ich von vector<string> s die Elemente 20 bis 50 in vector<float> x kopieren???
indem du den richtigen Start- und Endindex für deine Schleife verwendest:
for(int i=20;i<=50;++i) { float f=atof(s[i].c_str()); x.push_back(f); }(eventuell kannst du auch "x[i]=f;" verwenden, damit überschreibst du die Elemente 20 bis 50 von x mit den konvertierten Strings)
-
Ich war nicht klar... SCUZI
Ich reformuliere:std::copy(vector<string>::iterator s[20].iterator,s[50].iterator,back_inserter(x));Wie definiere ich richtig ein Iterator auf s[20], sodass ich copy benutzen kann??
-
s.begin() + n
-
Sehr schön!
std::copy(s.begin()+idx_channel[0],s.begin()+idx_channel[1],back_inserter(x));aber leider fuktioniert nicht
c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\xutility(1022): error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::allocator<_Ty>::value_type' (or there is no acceptable conversion)
with
[
_Ty=std::string
]
-
ist x ein std::vector<float>? Dann wirds wohl nicht gehen.
-
Ja, bei einem "blanken" copy lässt du auch die Umwandlung unter den Tisch fallen - du brauchst transform:
std::transform(s.begin()+idx_channel[0],s.begin()+idx_channel[1],back_inserter(x),atof);
-
Geht auch nicht!
c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\algorithm(388): error C2664: 'double (const char *)' : cannot convert parameter 1 from 'std::allocator<_Ty>::value_type' to 'const char *'
with
[
_Ty=std::string
]
-
Warum benutzt du nicht die for-Schleife?
-
Ich wollte nur elleganter schreiben...und die Algorithmen benutzen
-
Dann könntest du statt atof eine der C++-typischeren Umwandlungsmethoden (z.B. über stringstream's oder per boost::lexical_cast) verwenden - schau mal in die FAQ, was es da gibt.
oder du schreibst dir eine Hilfsfunktion:
inline float stof(const string& in) { return atof(in.c_str()); } transform(s.begin(),s.end(),back_inserter(x),stof);PS: eine weitere Alternative wäre es, den richtigen Funktor für transform() aus compose, mem_fun etc zusammenzubauen.
-
YUHUUUU!! Das funktioniert...
Für die Alternative mit Funktoren bin ich nicht so weit...
Auf jeden Fall danke für die schnellen Antworten...Eine sehr effektive Hilfe...