Accelerated C++ Exercise 8-2

#include <algorithm>
#include <iterator>

template<class InputIterator1, class InputIterator2>
bool my_equal( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2 ){
	while(first1!=last1){
		if(!(*first1==*first2))
			return false;
		++first1;
		++first2;
	}
	return true;
}

template <class ForwardIterator1, class ForwardIterator2>
ForwardIterator1 my_search(ForwardIterator1 b, ForwardIterator1 e, 
                           ForwardIterator2 b2, ForwardIterator2 e2) {
  for ( ;b != e; ++b) if (my_equal(b2, e2, b)) return b;
  return e;
}

template <class InputIterator, class Type>
InputIterator my_find(InputIterator b, InputIterator e, const Type& t) {
  for ( ;b != e; ++b) if (*b == t) return b;
  return e;
}

template <class InputIterator, class Predicate>
InputIterator my_find_if(InputIterator b, InputIterator e, Predicate p) {
  for ( ;b !=e; ++b) if (p(*b)) return b;
  return e;
}

template <class InputIterator, class OutputIterator>
OutputIterator my_copy(InputIterator b, InputIterator e, OutputIterator d) {
  for ( ;b != e; ++b) *d++ = *b;
  return d;
}

template <class InputIterator, class OutputIterator, class Type>
OutputIterator my_remove_copy(InputIterator b, InputIterator e,
                              OutputIterator d, const Type& t) {
  for ( ;b != e; ++b) if (*b != t) *d++ = *b;
  return d;
}

template <class InputIterator, class OutputIterator, class Predicate>
OutputIterator my_remove_copy_if(InputIterator b, InputIterator e,
                                 OutputIterator d, Predicate p) {
  for ( ;b != e; ++b) if (!p(*b)) *d++ = *b;
  return d;
}

template <class ForwardIterator, class Type>
ForwardIterator my_remove(ForwardIterator b, ForwardIterator e, 
                          const Type& t) {
  ForwardIterator first_fail = b;
  for ( ;b != e; ++b) if (*b != t) *first_fail++ = *b;
  return first_fail;
}

template <class InputIterator, class OutputIterator, class Function>
OutputIterator my_transform(InputIterator b, InputIterator e,
                            OutputIterator d, Function f) {
  for ( ;b != e; ++b) *d++ = f(*b);
  return d;
}

template <class ForwardIterator, class Predicate>
ForwardIterator my_partition(ForwardIterator b, ForwardIterator e,
                             Predicate p) {
  ForwardIterator first_fail = b;
  for ( ;b != e; ++b) if (p(*b)) swap(*first_fail++, *b);
  return first_fail;
}

template <class InputIterator, class Type>
Type my_accumulate(InputIterator b, InputIterator e, Type t) {
  for ( ;b != e; ++b) t += *b;
  return t;
}
#include <iostream>
#include <string>

#include "8-2.h"

using namespace std;

bool passes(char c) {
  return c == 'P';
}

int main() {
  string grades = "PPFPFPPFPFFFP";
  my_partition(grades.begin(), grades.end(), passes);
  cout << grades << endl;
  system("pause");
  return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值