【发布时间】:2015-09-11 04:45:33
【问题描述】:
我正在尝试将解析出的文件名从正则表达式匹配转移到filesystem::path 对象列表。
我相信匹配是有效的,因为 for_each 对于相同的迭代器和打印到控制台工作得很好。但是,我在运行此代码时遇到了分段错误。我究竟做错了什么?我的 lambda 有错误吗?
namespace fs = boost::filesystem;
std::forward_list<fs::path> results;
std::transform(std::sregex_iterator(file_data.begin(), file_data.end(), re),
std::sregex_iterator(), results.begin(),
[&](const std::smatch& m)->fs::path{
return root / fs::path(m[1].str());
});
GDB 将这一行显示为错误的地方:
path& operator=(const path& p)
{
m_pathname = p.m_pathname;
return *this;
}
更新:找到解决方案 - 使用 back_inserter(results) 而不是 results.begin()。但是,这是为什么呢?
【问题讨论】:
-
您确定您使用的是
back_inserter,而不是front_inserter?forward_list没有push_back函数,所以back_inserter不应该使用它。
标签: c++ regex lambda boost-filesystem