2015-04-29 19 views
0

我正在尝试创建basic_path的一级深度子路径(data/images/lol.png - >images/lol.png)。是否可以从一系列路径迭代器或子路径创建Filesystem TS basic_path?

我尝试了一些像std::path{ ++path.begin(), path.end() },但范围构造函数显然需要string_type::iterator s,而不是basic_path::iterator s。

是否有可能使用basic_path方法来做我需要的,或者我将不得不使用像std::accumulate(++path.begin(), path.end())(相当低效的imho)之类的东西?

+0

我courious与积累你的问题是什么。无论如何,你似乎没有其他选择。在性能方面,我认为考虑到大多数时间少于200个字符的路径并不算太坏。 – henje

+0

当然,但在性能方面它仍然是一个较慢的类(O(1)vs O(logn)分配在最坏的情况下),复杂性明显较慢(O(1)与O(n)在最坏的情况下)。 就我所知,路径迭代器的构造函数是微不足道的,所以它对我来说很奇怪,它是缺少的。另外从我公认的不好的内存中,它也是带有迭代器的标准库中的第一个实例,它没有构造器来接受这些迭代器。 – GhassanPL

回答

0

我能找到的最好的是

path subpath(path p) { 
    auto pathString = p.native(); 
    auto newBegin = find(pathString.begin(), pathString.end(), path::preferred_separator); 
    return path{ ++newBegin, pathString.end() }; 
} 

它只需要一个配置,但它的时间复杂度仍然是O(n),但我无法想象的方式来进一步加快步伐。

它仍然比累加(超过200个字符的路径)速度快:

accumulate: 31386 ns ± 5336.29 
my subpath: 785.857 ns ± 422.013 
相关问题