将<vector> <string>转换为<vector> <int> C++,Win32

Car*_*ark 9 c++ string vector

有没有一些方法可以在C++,win32中将向量转换为向量?

我有这个字符串向量与数字:

std::vector<std::string> DataNumbers;
Run Code Online (Sandbox Code Playgroud)

我需要将此向量字符串转换为向量整数.

Jos*_*eld 26

鉴于:

std::vector<std::string> DataNumbers;
// Fill DataNumbers
std::vector<int> Data;
Run Code Online (Sandbox Code Playgroud)

你可以用std::transform.使用a std::back_inserter将值插入到std::vector<int>.对于一元函数,请使用std::stoi用于将字符串转换为整数的lambda表达式.

std::transform(DataNumbers.begin(), DataNumbers.end(), std::back_inserter(Data),
               [](const std::string& str) { return std::stoi(str); });
Run Code Online (Sandbox Code Playgroud)

这是一个没有lambda的版本(std::bind改为使用):

typedef int(*stoi_type)(const std::string&, std::size_t*, int);
std::transform(DataNumbers.begin(), DataNumbers.end(), std::back_inserter(Data),
               std::bind(static_cast<stoi_type>(&std::stoi),
                         std::placeholders::_1, nullptr, 10));
Run Code Online (Sandbox Code Playgroud)

  • @sftrabbit oi,这很难看,但确实解决了这个问题. (2认同)

use*_*401 4

尝试这个:

   std::vector<std::string> DataNumbers;
    // Fill DataNumbers
    std::vector<int> intNumbers;
    for (int i=0; i<= 5; i++)
    {
     int num = atoi(DataNumbers.at(i).c_str());
     intNumbers.push_back(num);
    }
Run Code Online (Sandbox Code Playgroud)

  • 我不认为依赖硬编码长度和使用遗留的 C 函数是一个好的解决方案。如果您没有 C++11,请使用 Richard J Ross 的答案并将 `for (auto &amp;s : input)` 更改为 `for (vector&lt;string&gt;::iterator it = DataNumbers.begin(); it != DataNumbers.end(); it++)` 以及 `std::stringstream parser(s);` 到 `std::stringstream parser(*it);`。 (3认同)