算法之旅,直奔<algorithm>之七 copy_if

35 篇文章 1 订阅
29 篇文章 0 订阅

copy_if(vs2010版本)

  • 引言
copy_if 是我学习总结<algorithm>的第七篇,这个比较有特点,不过不能单独用,需要和vector的resize连在一起用。
  • 作用
copy_if的作用是有条件的复制数据。条件可以自定义,复制的对象还是把一组连续地址的数据复制到一个容器里,只不过根据条件把某些元素过滤掉了。
  • 原理
template <class InputIterator, class OutputIterator, class UnaryPredicate>
  OutputIterator copy_if (InputIterator first, InputIterator last,
                          OutputIterator result, UnaryPredicate pred)
{
  while (first!=last) {
    if (pred(*first)) {
      *result = *first;
      ++result;
    }
    ++first;
  }
  return result;
}


  • 实验
把数据集合里{25,15,-5,5,-15}的负数过滤掉,剩下的元素然后存在另一个容器里
            
  • 代码
test.cpp
#include <iostream>     // std::cout
#include <algorithm>    // std::copy_if, std::distance
#include <vector>       // std::vector
#include <array>

int main () 
{
	std::array<int,5> myints = {25,15,-5,5,-15};
	std::vector<int> foo(5);
	std::copy(myints.begin(),myints.end(),foo.begin());

	std::vector<int> bar (foo.size());

	// copy only positive numbers:
	auto it = std::copy_if (foo.begin(), foo.end(), bar.begin(), [](int i){return !(i<0);} );
	
	bar.resize(std::distance(bar.begin(),it));  // shrink container to new size

	
	std::cout << "bar contains:";
	std::copy(bar.begin(),bar.end(),std::ostream_iterator<int>(std::cout, " "));
	std::cout << '\n';
	
	system("pause");
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值