当前位置:  开发笔记 > 编程语言 > 正文

使用变换创建新矢量

如何解决《使用变换创建新矢量》经验,为你挑选了1个好方法。

我有一个整数向量,我想将它转换为对的向量(对由bool和int组成).我目前的代码很简单:

    std::vector a;
    std::vector > b;

    a.push_back(1);
    a.push_back(2);
    a.push_back(3);

    for(int i = 0; i < a.size(); ++i)
    {
        b.push_back(std::make_pair(false, a[i]));
    }

如果不自己编写循环,有没有办法做到这一点?可能使用一些算法?



1> Evan Teran..:

1.你可以做一个函子和std::for_each:

struct F {
    F(std::vector > &b) : m_b(b){
    }

    void operator()(int x) {
        m_b.push_back(std::make_pair(false, x));
    }

    std::vector > &m_b;
};

std::for_each(a.begin(), a.end(), F(b));

虽然这可能比它的价值更麻烦.但至少它可以重复使用:).

也许有一些事情可以做boost::bind.

2.编辑:我当时认为你可以使用绑定后插入器和转换.这样的事情:

std::transform(a.begin(), a.end(), std::back_inserter(b), boost::bind(std::make_pair, false, _1));

我试过这个std::bind1st,我认为它应该有效,但我只能让它成功boost::bind.我会继续努力......

3.编辑:这是一个非增强的解决方案:

std::transform(a.begin(), a.end(), std::back_inserter(b), std::bind1st(std::ptr_fun(std::make_pair), false));

4.编辑:这是一个C++ 11解决方案(这是我目前最喜欢的):

std::for_each(begin(a), end(a), [&b](int v) {
    b.push_back(std::make_pair(false, v));
});

甚至更简单:

for(int v : a) {
    b.push_back(std::make_pair(false, v));
}

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有