| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 535 人关注过本帖
标题:[求助]我又来问了,这回是关于标准cpp中的迭代器
只看楼主 加入收藏
hzdz
Rank: 2
等 级:论坛游民
帖 子:46
专家分:10
注 册:2007-2-3
收藏
 问题点数:0 回复次数:2 
[求助]我又来问了,这回是关于标准cpp中的迭代器

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;
}

大家来看看我的代码,主要是被我注释掉的部分,在用迭代器实现时,那里的判断该怎么办?好像迭代器里只有==和!=两种操作,还是我的理解有问题?

搜索更多相关主题的帖子: cpp 
2007-07-31 18:47
hzdz
Rank: 2
等 级:论坛游民
帖 子:46
专家分:10
注 册:2007-2-3
收藏
得分:0 

这里先回复自己,在for循环里犯了个很低级的错误,itr1!=(itr1+m_total-1) ,本来是想限制循环上限的,结果忘了itr1自己还是要变的。。我这两天真是笨。这么看来,需要新申请一个迭代器了

2007-07-31 19:26
hzdz
Rank: 2
等 级:论坛游民
帖 子:46
专家分:10
注 册:2007-2-3
收藏
得分:0 
问题解决
2007-07-31 19:31
快速回复:[求助]我又来问了,这回是关于标准cpp中的迭代器
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014460 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved