2012-10-12 38 views
2

請指導我如何,我可以將字符串轉化的載體要轉換一個向量的數據類型

std::vector<string> strVect; --> std::vector<float or double> flVect; 

(如strVect包含像價值觀{ 「0.1111」, 「0.234」, 「0.4556」})

使用C++將浮點數向量化爲

在此先感謝。

+2

我不能告訴你想要做什麼,但我打賭'std :: transform'與'boost :: lexical_cast'結合起來就可以完成這項工作。 –

+0

謝謝你能給我它的語法。 – DataMiner

+3

@ user986789:「謝謝你,我可以編碼」。 FTFY。 –

回答

2

這裏是不使用升壓解決方案:

std::vector<string> strVect; 
//... 
std::ostringstream ss; 
std::vector<double> flVect(strVect.size()); 
for(size_t i = 0; i < strVect.size(); ++i) 
{ 
    ss.str(strVect[i]); 
    ss >> flVect[i]; 
} 
+3

您必須在每次迭代中清除字符串流。否則,這將不會生成所需的輸出。 – jogojapan

+0

@jogojapan固定,謝謝! – Alex

+1

更簡單的'ss.str(strVect [i])'而不是'ss << strVect [i]'怎麼樣,這會使得清除不必要以及使用'std :: ostringstream'更合適最後值得加價)。 –

2

除了現有的答案,一個非常簡單的方法是使用C++ 11個字符串轉換函數和C++ 11個lambda表達式:

std::vector<string> strVect = ...; 
std::vector<float> flVect(strVect.size()); 
std::transform(strVect.begin(), strVect.end(), flVect.begin(), 
       [](const std::string &arg) { return std::stof(arg); }); 

double類似,當然也可以使用std::stod

+0

第一個不會工作。 'stof'是過載,你必須將其轉換爲正確的類型。 'flVect(strVect.size())'在這裏可能沒有開銷,但我更喜歡'vector :: reserve'。這樣,如果這種情況成爲通用上下文,就不會有意想不到的性能下降。 – pmr

+0

@pmr確實,cppreference.com對我說謊了(我應該意識到我自己並沒有對'std :: string'進行任何處理,它確實只對'std :: string'有效)。 –