相关疑难解决方法(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万
查看次数

如何组合std :: copy_if和std :: transform?

考虑这个代码片段:迭代第一个类型T1的一个容器,用于创建应用转换函数T1-> T2的第二个类型T2的第二个容器,但仅用于验证谓词的T1元素(T1 - > bool)

(在下面的例子中是奇数).

std::vector<int> myIntVector;
myIntVector.push_back(10);
myIntVector.push_back(15);
myIntVector.push_back(30);
myIntVector.push_back(13);

std::vector<std::string> myStringVectorOfOdd;

std::for_each(myIntVector.begin(), myIntVector.end(),
    [&myStringVectorOfOdd](int val)
{
    if (val % 2 != 0)
        myStringVectorOfOdd.push_back(std::to_string(val));

});
Run Code Online (Sandbox Code Playgroud)

我在这段代码中不喜欢的是lambda上的捕获.有没有办法结合std :: copy_if和std :: transform以更优雅和简洁的方式实现相同的结果?

c++ std

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

标签 统计

c++ ×2

c++-standard-library ×1

std ×1

stl-algorithm ×1