将一个整数向量转换为一个字符串向量

12
我正在尝试将一个`vector`转换为一个`vector`。使用`std::transform`函数,我使用了`std::to_string`将`int`转换为`string`,但是我一直收到错误提示。以下是我的代码:
#include <vector>
#include <iostream>
#include <algorithm>
#include <string>

int main(){
    std::vector<int> v_int;
    std::vector<std::string> v_str;

    for(int i = 0;i<5;++i)
        v_int.push_back(i);

    v_str.resize(v_int.size());
    std::transform(v_int.begin(),v_int.end(),v_str.begin(),std::to_string);
}

但是我遇到了这个错误

 no matching function for call to 'transform'
        std::transform(v_int.begin(),v_int.end(),v_str.begin(),std::to_string);
        ^~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/algorithm:1951:1: note: 
      candidate template ignored: couldn't infer template argument
      '_UnaryOperation'
transform(_InputIterator __first, _InputIterator __last, _OutputIterato...
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/algorithm:1961:1: note: 
      candidate function template not viable: requires 5 arguments, but 4 were
      provided
transform(_InputIterator1 __first1, _InputIterator1 __last1, _InputItera...
1个回答

15

std::to_string 是一个重载函数,因此您需要提供强制类型转换以消除歧义。

std::transform(v_int.begin(),v_int.end(),v_str.begin(),
               static_cast<std::string(*)(int)>(std::to_string));

或使用 lambda

std::transform(v_int.begin(),v_int.end(),v_str.begin(),
               [](int i){ return std::to_string(i); });

@gauravsehgal 我将它转换为一个指向函数类型的指针,该函数接受一个 int 参数并返回 std::string。由于 OP 有一个 vector<int>,所以这是我上面链接列表中相关的重载。 - Praetorian
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - molbdnilo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接