小编kil*_*gre的帖子

std :: for_each在多个迭代器范围内工作

lambda表示法使得stl算法更易于访问.我仍然在学习什么时候它有用以及何时回归到老式的for-loops.通常,有必要迭代两个(或更多)相同大小的容器,使得相应的元素是相关的,但由于某种原因不会被打包到同一个类中.

使用for循环实现的函数如下所示:

template<typename Data, typename Property>
void foo(vector<Data>& data, vector<Property>& prop) {
    auto i_data = begin(data);
    auto i_prop = begin(prop);
    for (; i_data != data.end(); ++i_data, ++i_prop) {
        if (i_prop->SomePropertySatistfied()) {
            i_data->DoSomething();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为了使用for_each,我需要一个处理多个范围的版本; 就像是:

template<typename InputIter1, typename InputIter2, typename Function>
Function for_each_on_two_ranges(InputIter1 first1, InputIter1 last1, InputIter2 first2, Function f) {
    for (; first1 != last1; ++first1, ++first2) {
        f(*first1, *first2);
    }
    return f;
}
Run Code Online (Sandbox Code Playgroud)

使用此版本,上面的代码如下所示:

template<typename Data, typename Property>
void foo_two_ranges(vector<Data>& data, vector<Property>& prop) {
    for_each_on_two_ranges(begin(data), end(data), …
Run Code Online (Sandbox Code Playgroud)

c++ boost stl c++11

11
推荐指数
2
解决办法
2251
查看次数

总结两个boost :: accumulator_set实例

我最近发现了优秀的库boost :: accumulators,我想用它来代替我积累统计数据的一些代码.

我在文档中找不到的一件事是能够对两个累加器集合求和,如operator + =

例:

using namespace boost::accumulators;
typedef accumulator_set<double, features<tag::variance> > AccumSet;

class Foo {
    AccumSet acc;
public:
    Foo& operator+=(const Foo& that) {
        this->acc += that.acc; // error! no such operator
        return *this;
    }
    double GetVariance() { return variance(acc); }
};
Run Code Online (Sandbox Code Playgroud)

如何使用可用的API实现此目的?我不知道这是否可以实现库中所有类型的累加器(可能不是尾部),但它肯定可以用于重要的事情,如计数,总和,平均值,时刻,协方差等

c++ boost c++11 boost-accumulators

11
推荐指数
1
解决办法
778
查看次数

使用模板库编译器内存消耗(boost + Eigen)

我正在编写一个模板算法,它使用boost :: accumulators和Eigen线性代数库.在编译时,可视化工作室编译器(cl.exe),内存消耗达到超过2.5GB的RAM,而我的PC(Windows 7 32位,3GB虚拟地址空间)变得无响应(相当长的时间:~1分钟) .这些编译单元的二进制文件(.obj)为10-20MB.

我的问题(不针对这些特定的库)

  1. 对于大量使用模板的代码,这是正常行为吗?
  2. 有没有什么可以减少内存需求和编译时间?
  3. 如果问题没有很好的解决方案,为什么设计编程语言的人不会解决这个问题?人们越了解C++,他们就越可能使用模板,并生成难以编译的代码和膨胀的二进制文件.

c++ templates boost visual-studio eigen

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

标签 统计

boost ×3

c++ ×3

c++11 ×2

boost-accumulators ×1

eigen ×1

stl ×1

templates ×1

visual-studio ×1