相关疑难解决方法(0)

为什么C++标准库中没有transform_if?

当想要执行一个副本(1. doable with copy_if)但是从一个容器值到一个指向这些值的指针容器(2.可行transform)时,就出现了一个用例.

可用的工具,我不能做到这一点,在不到两个步骤:

#include <vector>
#include <algorithm>

using namespace std;

struct ha { 
    int i;
    explicit ha(int a) : i(a) {}
};

int main() 
{
    vector<ha> v{ ha{1}, ha{7}, ha{1} }; // initial vector
    // GOAL : make a vector of pointers to elements with i < 2
    vector<ha*> ph; // target vector
    vector<ha*> pv; // temporary vector
    // 1. 
    transform(v.begin(), v.end(), back_inserter(pv), 
        [](ha &arg) { return &arg; }); 
    // 2. 
    copy_if(pv.begin(), pv.end(), …
Run Code Online (Sandbox Code Playgroud)

c++ c++-standard-library stl-algorithm

72
推荐指数
5
解决办法
2万
查看次数

是否可以使用boost :: filter_iterator进行输出?

我正在使用std::transforman std::back_inserter来追加元素std::deque.现在转换可能会失败,并且boost::optional在某些情况下将返回无效对象(比如未初始化或空指针).我想过滤掉附加的无效对象.

我想过使用boost::filter_iterator,但不知道如何呈现end()过滤范围的参数.

文档boost::filter_iterator建议输出过滤是可能的.如果我只是专注operator ==std::back_insert_iterator在这种情况下总是返回false?

除此之外,如果我想追加初始化boost::optional或指针的值,我可以链接boost::filter_iteratorboost::indirect_iterator

我试图避免推出我自己的transform_valid带有可选extractor功能的函数.

甚至可以filter_iterator用作输出迭代器吗?

c++ boost stl

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

标签 统计

c++ ×2

boost ×1

c++-standard-library ×1

stl ×1

stl-algorithm ×1