加速boost :: iterator_facade取消引用

Chr*_*ris 1 c++ performance boost iterator

我正在使用iterator_facade为类提供迭代器支持.但是,因为iterator_facade :: dereference通过引用返回,并且它是一个返回非平凡copy-const的对象,所以我的性能会因为不断执行这些而导致每次取消引用(如使用VTune进行分析)副本.有没有解决的办法?

class time_series::iterator : public boost::iterator_facade<
                         time_series::iterator,
                         time_series::variable_vec,
                         boost::bidirectional_traversal_tag,
                         timestep> //<--- dereference type
{
public:
    iterator();
    iterator(const iterator& src);
    ~iterator();
    iterator& operator=(const iterator& rhs);
private:
     //the following satisfies the reqs for a boost::facade bidirectional iterator
     friend class boost::iterator_core_access;
     friend class time_series;

     const timestep& dereference() const;
     bool equal(iterator const& other) const;
     void increment();
     void decrement();
     std::ptrdiff_t distance_to(iterator const& other) const;

     //iterators for the current step
     timestep _currentStep;// <--returned on dereference, is non-trivial to copy.
};
Run Code Online (Sandbox Code Playgroud)

编辑:根据评论

const timestep& time_series::iterator::dereference() const
{
    return _currentStep;
}
Run Code Online (Sandbox Code Playgroud)

Ant*_*vin 5

您指定timestep的,而不是timestep&作为Reference模板参数,这就是为什么它不断进行复印.将其更改为timestep&或删除.

同样由于某种原因,您可以_currentStep按值存储在迭代器中,因此每次递增或递减时都可能会复制.

阅读iterator_facade上Boost教程,获取有关如何正确实现Facade的参考.

  • @Chris在`it-> my_method()`中(相当于`(*it).my_method()`,请注意括号)? (2认同)