小编not*_*end的帖子

何时在函数中使用const引用而不是const值?

在64位系统上,const&是8个字节.对于小于8字节的值和对象,传递值而不是引用是有意义的.即使是8字节的对象复制也比传递引用便宜,然后访问对象.

您应该在什么阈值上更喜欢const值而不是const值?

c++ performance const reference

6
推荐指数
1
解决办法
386
查看次数

C++ Cartesian产品迭代器在第一次迭代时调用基类函数

我正在研究一组n维笛卡尔积类型,基于这个解决方案.

对于相同的基本算法集,我有许多不同的数据类型,我想"啊哈!我将使用模板来减少我的整体工作!" 而且,到目前为止,它一直很棒.我正在使用Boost的iterator_facade.

我的问题是我使用的派生类map<char, boost::integer_range<int> >.每次迭代产生一个map<char,int>,但我排除第二个值为0的对,因为就我的算法而言,它们只是浪费空间.

派生类重载生成迭代器的返回值的函数,并且它可以工作.但是,在第一次迭代期间,将调用基类的生成器.我很困惑.有没有人有任何想法?

以下是相关的代码段:


#include <boost/container/flat_map.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/iterator/iterator_facade.hpp>
#include <boost/range/irange.hpp>
#include <utility>
#include <iostream>

using namespace boost;
using namespace boost::tuples;
using namespace std;

template <class Container2DMap,
    class return_type = boost::container::flat_map<typename Container2DMap::value_type::first_type,
    typename Container2DMap::value_type::second_type::value_type> >
class CartProductIterator2DMap : public boost::iterator_facade<
CartProductIterator2DMap<Container2DMap, return_type>,
const return_type,
boost::forward_traversal_tag> {
public:
    typedef typename Container2DMap::value_type::first_type first_type;
    typedef typename Container2DMap::const_iterator first_iterator;
    typedef typename Container2DMap::value_type::second_type::value_type second_type;
    typedef typename Container2DMap::value_type::second_type::const_iterator second_iterator;

    CartProductIterator2DMap(const Container2DMap &container) {
        rangeIterSetup(container);
    } …
Run Code Online (Sandbox Code Playgroud)

c++ templates derived-class cartesian-product

3
推荐指数
1
解决办法
714
查看次数