STL迭代器/ reverse_iterator [英] STL iterator/reverse_iterator

查看:61
本文介绍了STL迭代器/ reverse_iterator的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题是重新调整STL iterator / reverse_iterator。


我想编写一个函数来执行以下操作


int CFoo: :calculate(std :: vector< int> :: iterator itBegin,

std :: vector< int> :: iterator itEnd)

{

int nWSum = 0;

std :: vector< int> :: iterator it = itBegin;

for(int i = 1; it!= itEnd; + +它,++ i)

{

nWSum + = i *(* it);

}

返回nWSum;

}


理想情况下,我想传递前向迭代器或反向
$ b $向量的b迭代器(每个加权和将是不同的)。


int nSum1 = oCFoo.calculate(vecA.begin(),vecA.end());

int nSum2 = oCFoo.calculate(vecA.rbegin(),vecA.rend());


如何设置接口进行计算以便我可以那样做吗?


谢谢。

My question is regaring STL iterator/reverse_iterator.

I would like to write a function which does the following

int CFoo::calculate(std::vector<int>::iterator itBegin,
std::vector<int>::iterator itEnd)
{
int nWSum = 0;
std::vector<int>::iterator it = itBegin;
for (int i = 1; it != itEnd; ++it, ++i)
{
nWSum += i*(*it);
}

return nWSum;
}

Ideally, I would like to pass in the forward iterator or the reverse
iterator for the vector (the weighted sum will be different for each).

int nSum1 = oCFoo.calculate(vecA.begin(), vecA.end());
int nSum2 = oCFoo.calculate(vecA.rbegin(), vecA.rend());

How should I setup the interface for calculate so that I can do that?

Thanks.

推荐答案

jason schrieb:
jason schrieb:
我的问题是重新调整STL iterator / reverse_iterator。

我想编写一个函数来执行以下操作

int CFoo :: calculate(std :: vector< int> :: iterator itBegin,
std :: vector< int> :: iterator itEnd)
int nWSum = 0;
std: :vector< int> :: iterator it = itBegin;
for(int i = 1;它!=它结束; ++ it,++ i)
{
nWSum + = i *(* it);
}

返回nWSum;
}
My question is regaring STL iterator/reverse_iterator.

I would like to write a function which does the following

int CFoo::calculate(std::vector<int>::iterator itBegin,
std::vector<int>::iterator itEnd)
{
int nWSum = 0;
std::vector<int>::iterator it = itBegin;
for (int i = 1; it != itEnd; ++it, ++i)
{
nWSum += i*(*it);
}

return nWSum;
}




模板< class InputIterator>

int CFoo :: for_each(InputIterator first,InputIterator last)

{

int nWSum = 0;

InputIterator it = first;

for(int i = 1; it!= last; ++ it,+ + i)

{

nWSum + = i *(* it);

}


返回nWSum;

}



template <class InputIterator>
int CFoo::for_each(InputIterator first, InputIterator last)
{
int nWSum = 0;
InputIterator it = first;
for (int i = 1; it != last; ++it, ++i)
{
nWSum += i*(*it);
}

return nWSum;
}


jason写道:
我的问题是重新调整STL iterator / reverse_iterator。
我应该如何设置接口进行计算以便我可以这样做?
My question is regaring STL iterator/reverse_iterator.
How should I setup the interface for calculate so that I can do that?




//reverse_iterator是与迭代器不同的类型。使用

//模板参数,作为奖励,它现在可以用于

//而不仅仅是矢量。 (int可能不是最好的

//用于返回类型虽然...)


模板< class T>

int calculate(T itBegin,T itEnd)

{

int nWSum = 0;

T it = itBegin;

for(typename iterator_traits< T> :: difference_type i = 1;

it!= itEnd; ++ it,++ i)

{

nWSum + = i *(* it);

}


返回nWSum;

}



// "reverse_iterator" is a different type than "iterator". Use a
// template parameter, and as a bonus, it''ll now work for
// more than just vectors. ("int" might not be the best to
// use for a return type though...)

template<class T>
int calculate(T itBegin,T itEnd)
{
int nWSum = 0;
T it = itBegin;
for (typename iterator_traits<T>::difference_type i = 1;
it != itEnd; ++it, ++i)
{
nWSum += i*(*it);
}

return nWSum;
}


Greg Buchholz写道:
Greg Buchholz wrote:
jason写道:
jason wrote:
我的问题是重新调整STL iterator / reverse_iterator。
我应该如何设置接口进行计算以便我可以这样做?
My question is regaring STL iterator/reverse_iterator.
How should I setup the interface for calculate so that I can do that?



//" reverse_iterator"是与迭代器不同的类型。使用
//模板参数,作为奖励,它现在可以用于
//而不仅仅是矢量。 (int可能不是最好的
//用于返回类型虽然...)

模板< class T>
int calculate(T itBegin, T itEnd)
{nWSum = 0;
T it = itBegin;
for(typename iterator_traits< T> :: difference_type i = 1;
它! = itEnd; ++ it,++ i)
{
nWSum + = i *(* it);
}
返回nWSum;
}


// "reverse_iterator" is a different type than "iterator". Use a
// template parameter, and as a bonus, it''ll now work for
// more than just vectors. ("int" might not be the best to
// use for a return type though...)

template<class T>
int calculate(T itBegin,T itEnd)
{
int nWSum = 0;
T it = itBegin;
for (typename iterator_traits<T>::difference_type i = 1;
it != itEnd; ++it, ++i)
{
nWSum += i*(*it);
}

return nWSum;
}



我想它应该是:


模板< typename T>

int calculate(const T& ; itBegin,const T& itEnd)


用于非平凡的迭代器类型。


-

Ian柯林斯。


I guess it should be:

template <typename T>
int calculate( const T& itBegin, const T& itEnd)

for non-trivial iterator types.

--
Ian Collins.


这篇关于STL迭代器/ reverse_iterator的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆