![](/img/trans.png)
[英]Convenient way to convert vector<string> to vector<double>
[英]What is the best way to convert vector<vector<string>> into vector<vector<double>>?
以下是示例。
vector<vector<string>> vec_str = {{"123", "2015", "18"}, {"345", "2016", "19"}, {"678", "2018", "20"}};
vector<vector<double>> vec_dou;
我想將 vec_str 轉換為 {{123, 2015, 18}, {345, 2016, 19}, {678, 2018, 20}}。 我嘗試使用 std::transform 方法,但是當我在 for 循環或 while 循環中使用 transform 時,它不能正常工作,這意味着它返回了錯誤代碼 03。
[Thread 11584.0x39f4 exited with code 3]
[Thread 11584.0x5218 exited with code 3]
[Inferior 1 (process 11584) exited with code 03]
我不知道錯誤的確切原因,所以請不要問我.. VS 代碼只返回了上述錯誤。 ;-(
最好的方法是什么?
您可以使用嵌套的std::transform
實現此目的:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main() {
vector<vector<string>> vec_str = {{"123", "2015", "18"}, {"345", "2016", "19"}, {"678", "2018", "20"}};
vector<vector<double>> vec_dou;
std::transform(vec_str.begin(), vec_str.end(), std::back_inserter(vec_dou), [](const auto& strs) {
vector<double> result;
std::transform(strs.begin(), strs.end(), std::back_inserter(result), [](const auto& str) { return std::stod(str); });
return result;
});
for (const auto& nums : vec_dou) {
for (double d : nums) {
cout << ' ' << d;
}
cout << endl;
}
}
這是一個非常簡單的方法:
#include <iostream>
#include <string>
#include <vector>
int main( )
{
std::vector< std::vector<std::string> > vec_str = { {"123", "2015", "18"},
{"345", "2016", "19"},
{"678", "2018", "20"} };
// construct vec_dou at exactly the dimensions of vec_str
std::vector< std::vector<double> >
vec_dou( vec_str.size( ), std::vector<double>( vec_str[0].size( ) ) );
for ( std::size_t row = 0; row < vec_str.size( ); ++row )
{
for ( std::size_t col = 0; col < vec_str[0].size( ); ++col )
{
vec_dou[row][col] = std::stod( vec_str[row][col] ); // convert each
} // string to double
}
for ( const auto& doubleNumbers : vec_dou ) // print the double numbers
{
for ( const double& num : doubleNumbers )
{
std::cout << ' ' << num;
}
std::cout << '\n';
}
}
output:
123 2015 18
345 2016 19
678 2018 20
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.