C ++将函数应用于容器中的某些元素

时间:2014-01-02 03:22:22

标签: c++ c++11

我想将函数应用于std :: vector的某些元素。我使用std :: includes来检查“较小”的向量是否存在于“较大”的向量中,如果存在,我想申请“较大”向量的这些元素的函数,它们等于“较小”的元素。有什么建议吗?

编辑:
OP

错误地将以下内容发布为答案

std :: search存在问题!它找到一个包含在向量中的序列的第一次出现,而在我的向量中这些元素在几个位置。我也有一个对象向量!!!

1 个答案:

答案 0 :(得分:2)

不确定您遇到问题的部分,但这里有一个简单的示例,显示较大的vector中包含的元素范围与较小的元素的内容相同我使用std::search代替std::includes来确定较大的vector是否包含较小的元素范围,因为与includes不同,它返回布尔结果, search会将迭代器返回到较大vector中包含范围的开头。

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

void times_two(int& t)
{
    t *= 2;
}

int main()
{
    std::vector<int> v1{1,2,3,4,5,6,7,8,9};
    std::vector<int> v2{4,5,6};

    // find if the larger vector contains the smaller one
    auto first = std::search(v1.begin(), v1.end(), v2.begin(), v2.end());
    if(first != v1.end()) {
        // get the last element in the sub-range
        auto last = std::next(first, v2.size());

        // apply function to each sub-range element
        std::for_each(first, last, times_two);
    }

    for(auto const& v : v1) {
        std::cout << v << ' ';
    }
    std::cout << '\n';
}

输出:

1 2 3 8 10 12 7 8 9 

编辑:
Here's an example使用boost::find_nth执行搜索。