我試圖從正則表達式匹配到filesystem::path
對象列表中分析出文件名。std :: transform中的分割錯誤
我相信匹配是有效的,因爲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;
}
UPDATE:找到了解決辦法 - 使用back_inserter(results)
代替results.begin()
。但是,爲什麼呢?
您確定您使用過'back_inserter',而不是'front_inserter'嗎? 'forward_list'沒有'push_back'函數,所以'back_inserter'不應該與它一起工作。 –