我想将函数应用于std :: vector的某些元素。我使用std :: includes来检查“较小”的向量是否存在于“较大”的向量中,如果存在,我想申请“较大”向量的这些元素的函数,它们等于“较小”的元素。有什么建议吗?
编辑:
OP
std :: search存在问题!它找到一个包含在向量中的序列的第一次出现,而在我的向量中这些元素在几个位置。我也有一个对象向量!!!
答案 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
执行搜索。