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

本文介绍了一种名为虚拟迭代器的C++模板类,该类可以用于生成数学函数序列并进行运算,如正弦和余弦函数的计算、求和及内积计算等。通过这种方式,展示了如何灵活运用STL算法进行数学处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream> 
#include <algorithm>
#include
<numeric>
#include
<iterator>
#include <functional>
#include
<cmath>
template<class T,class Generator>
class
virtual_iterator:public std::iterator<std::forward_iterator_tag,T>
{
public
:
typedef T value_type;
virtual_iterator(size_t const&i):_i(i){}
value_type& operator*()
{
return _value=_generator(_i);
}
const value_type& operator++()
{
_i++;return _value=_generator(_i);
}
const value_type& operator++(int)
{
_i++;
return _value=_generator(_i);
}
bool operator==(const virtual_iterator& other) const
{
return _i == other._i;
}
bool operator!=(const virtual_iterator& other) const
{
return _i != other._i;
}
private:
size_t _i;
value_type _value;
Generator _generator;
};
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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值