自定义STL游标实现虚拟容器(3)

最后得到的虚拟容器类保存成为头文件之后大概就是下面的这个样子:

#pragma once 
#include <iterator>
template
<class T,class Generator>
class
virtual_iterator:public std::iterator<std::forward_iterator_tag,T>
{
public
:
typedef T value_type;
virtual_iterator() :_i(0)
{
}
virtual_iterator(size_t const&i) :_i(i)
{
}
value_type& operator*()
{
return _value = _generator(_i);
}
const virtual_iterator& operator++()
{
_i++; return *this;
}
const virtual_iterator& operator++(int)
{
++_i; return *this;
}
bool operator==(const virtual_iterator& other) const
{
return _i == other._i;
}
bool operator!=(const virtual_iterator& other) const
{
return _i != other._i;
}
operator const size_t&()const{return _i;}
private:
size_t _i;
value_type _value;
Generator _generator;
};
//
//以下是测试代码
//#include <iostream>
//#include <algorithm>
//#include <numeric>
//#include <functional>
//#include <cmath>
//struct Sin { double operator()(const size_t&i) { return sin(i); } };
//struct Cos { double operator()(const size_t&i) { return cos(i); } };
//template<class T,class Generator>
//void display(virtual_iterator<T,Generator>&begin,virtual_iterator<T,Generator>&end,const char*str)
//{
// std::cout << str ;
// std::copy(begin,end,std::ostream_iterator<T>(std::cout," "));
// std::cout << std::endl;

//}

//int main()
//{
// std::cout.precision(20);
// {

// virtual_iterator<double,Sin> begin(0),end(5);
// display(begin,end,"正弦函数:");
// double result=std::accumulate(begin,end,0.0);

// std::cout << "正弦函数求和 = [" << result<< "]" << std::endl;
// }
// std::cout << std::endl;
// {
// virtual_iterator<double,Cos> begin(0),end(5);
// display(begin,end,"余弦函数:");
// double result=std::accumulate(begin,end,0.0);

// std::cout << "余弦函数求和 = [" << result<< "]" << std::endl;
// }
// std::cout << std::endl;
// {
// virtual_iterator<double,Sin> sin_begin(0),sin_end(5);
// virtual_iterator<double,Cos> cos_begin(0),cos_end(5);
// display(sin_begin,sin_end,"正弦函数a:");
// display(cos_begin,cos_end,"余弦函数b:");
// double result=std::inner_product(sin_begin,sin_end,cos_begin,0.0);

// std::cout << "a和b的内积 = [" << result<< "]" << std::endl;

// }

// return 0;
//}

//

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值