RT,这是C++ PRIMER上的一道题(P83),本身不难,用下标操作vector很快实现,可是这里想用下迭代器,怎么也调不出来,如下:
下面是我在VC6下面的源文件:
/*
这是c++ primer上的题,原题如下:读一组整数到vector对象,计算并输出每对相邻元素的和。
如果读入元素个数为奇数,则提示用户最后一个元素没有求和,并输出其值。
*/
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::cin;
using std::vector;
int main()
{
int m_input;
int m_total=0;
vector<int> vtr1;
vector<int> vtr2;
vector<int> vtr3;
cout<<"请随便输数,按F6结束输入"<<endl;
while (cin>>m_input)
{
vtr1.push_back(m_input);
++m_total;
}
cout<<"你一共输入了 ";
for (std::vector<int>::iterator itr=vtr1.begin();itr!=vtr1.end();++itr)
{
cout<<*itr<<" ";
}
cout<<"这"<<m_total<<"个数"<<endl;
while(0!=m_total)
{
if (0!=m_total%2)
{
cout<<"您输入了奇数个数,因此最后一个数不能求和,原样输出,以下是处理结果:"<<endl;
std::vector<int>::iterator itr1=vtr1.begin();
cout<<*(itr1+m_total-1)<<"(这是最后那个独立的数)"<<" ";
for (/*itr1=vtr1.begin();itr1!=(itr1+m_total-2);itr1=itr1+2*/std::vector<int>::size_type st1=0;st1<vtr1.size()-1;st1=st1+2)
{
vtr2.push_back(vtr1[st1]+vtr1[st1+1]);
// vtr2.push_back(*itr1+*(itr1+1));
}
for (std::vector<int>::iterator itr2=vtr2.begin();itr2!=vtr2.end();++itr2)
{
cout<<*itr2<<" ";
}
cout<<endl;
}
else
{
cout<<"您输入了偶数个数,所有原数都可以按要求加和输出,以下是处理结果:"<<endl;
for (/*itr1=vtr1.begin();itr1!=(itr1+m_total-2);itr1=itr1+2*/std::vector<int>::size_type st1=0;st1<vtr1.size()-1;st1=st1+2)
{
vtr3.push_back(vtr1[st1]+vtr1[st1+1]);
// vtr3.push_back(*itr1+*(itr1+1));//这部分代码用下标已经可以实现,用迭代器为什么实现不了呢?
}
for (std::vector<int>::iterator itr3=vtr3.begin();itr3!=vtr3.end();++itr3)
{
cout<<*itr3<<" ";
}
cout<<endl;
}
return 0;
}
cout<<endl<<"没有数据输入,程序默认结束"<<endl;
return 0;
}
大家来看看我的代码,主要是被我注释掉的部分,在用迭代器实现时,那里的判断该怎么办?好像迭代器里只有==和!=两种操作,还是我的理解有问题?