【发布时间】:2017-07-17 14:20:10
【问题描述】:
我正在尝试将 foo 实例的向量转换为字符串,但在 std::transform 上出现致命错误。
说data 具有以下值:
[0]
[name] = John
[size] = 3423
[1]
[name] = Joseph
[size] = 3413
代码:
struct foo {
foo(std::string n, size_t s)
: name(std::move(n)),
size(s)
{
}
std::string name;
size_t size;
};
std::string server = "1";
std::vector<std::string> output;
output.reserve(static_cast<unsigned_long>(std::distance(std::begin(data), std::end(data))));
std::transform(std::begin(data),
std::end(data),
std::begin(output),
[&, this](foo const& item){
std::ostringstream result;
data << server << ","
<< item.name << ","
<< item.size << ";";
return result.str();
});
在调试时它停在该行
stl_algo.h 中的 tranform 实现的 *__result = __unary_op(*_first) 然后转到 catch 测试框架的 FatalConditionHandler。我对捕获测试和 std::transform 都是新手。有人可以解释可能导致问题的原因以及如何解决吗?非常感谢!
【问题讨论】:
-
应该是
result << server << ...? -
std::vector::reserve不会像您认为的那样做。resize更准确,但即便如此,您也可能希望避免这种情况。
标签: c++ std stl-algorithm catch-unit-test