我需要从csv文件读入并存储在整数数组中,在读取行并用boost::split
拆分行后,我得到了一个字符串LineItems的向量。我可以通过以下方法将其转换为整数数组:
for (int i=0; i<=10; i++) {
WorkArr[i]=stoi(LineItems[i]);
}
(我知道csv的大小和格式,因此我可以使用数组来存储。) 但是,我想使用transform来执行此任务:
transform(LineItems.begin(),LineItems.end(),WorkArr,stoi);
但是编译器说它不知道要使用哪个重载版本的stoi
(我使用的是VC ++)。
我知道我可以这样解决方法:
int MyStoI(string & ss) return stoi(ss);
transform(LineItems.begin(),LineItems.end(),WorkArr,MyStoI);
但是这引入了另一个函数MyStoI
。有没有什么方法可以在不引入新功能的情况下执行此操作?
Regds
林志峰答案 0 :(得分:2)
如何使用lambda?像这样:
std::transform(LineItems.begin(), LineItems.end(),
std::back_inserter(WorkArr),
[](const std::string& str)
{
return std::stoi(str);
});
如果WorkArr
是普通数组(不是向量),您可以像这样使用它:
std::transform(LineItems.begin(), LineItems.end(), WorkArr,
[](const std::string& str)
{
return std::stoi(str);
});