C++ std::transform c+上出现致命错误+;
我试图将foo实例的向量转换为字符串,但在std::transform上出现了致命错误 假设C++ std::transform c+上出现致命错误+;,c++,std,stl-algorithm,catch-unit-test,C++,Std,Stl Algorithm,Catch Unit Test,我试图将foo实例的向量转换为字符串,但在std::transform上出现了致命错误 假设数据具有以下值: [0] [name] = John [size] = 3423 [1] [name] = Joseph [size] = 3413 代码: structfoo{ foo(标准::字符串n,大小s) :名称(std::move(n)), 尺寸(s) { } std::字符串名; 大小; }; std::string server=“1”; std
数据
具有以下值:
[0]
[name] = John
[size] = 3423
[1]
[name] = Joseph
[size] = 3413
代码:
structfoo{
foo(标准::字符串n,大小s)
:名称(std::move(n)),
尺寸(s)
{
}
std::字符串名;
大小;
};
std::string server=“1”;
std::矢量输出;
保留(静态_转换(标准::距离(标准::开始(数据),标准::结束(数据)));
标准::转换(标准::开始(数据),
标准::结束(数据),
开始(输出),
[&,此](食物常量和项目){
std::ostringstream结果;
数据您在输出中保留了空间,但将其大小保留为零
然后通过它的begin
迭代器继续写,就像它有空间保存数据一样
然后一切都“繁荣”
<> >而不是通过<代码> STD:Dead(输出)进行编写,考虑使用<代码> STD::BaseXEnter(输出)< /C>作为目标迭代器。
您还有一个问题:在lambda中,您有:
std::ostringstream result;
data << server << ","
<< item.name << ","
<< item.size << ";";
return result.str();
然后lambda主体变成:
return server + "," + item.to_string();
更短、更简单,而且几乎肯定更快。应该是结果std::vector::reserve
不会做你认为它做的事。resize
更准确,但即使这样,你也可能想要避免。非常感谢!!!这真的很有帮助!
std::ostringstream result;
result << server << ","
<< item.name << ","
<< item.size << ";";
return result.str();
struct foo {
std::string name;
size_t size;
// new addition:
friend std::ostream &operator<<(std::ostream &os, foo const &f) {
return os << f.name << ',' << f.size;
}
};
std::ostringstream result;
result << server << "," item;
return result.str();
struct foo {
// ...
std::string to_string() {
return name + "," + size;
}
};
return server + "," + item.to_string();