| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 652 人关注过本帖
标题:求教C++Primer 上一个题目
只看楼主 加入收藏
doom5211
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-6-7
收藏
 问题点数:0 回复次数:7 
求教C++Primer 上一个题目
本人正在学习C++Primer第三版,但里面的习题没有参考答案,能否告诉我哪里有答案可以下载的.
目前有个题目我弄不出来,希望各位C++牛人指导一下菜鸟,书上第三章第10节关于vector容器类型那里,课后习题有道编写函数的题目:

已知下面函数声明:
bool is_equal( const int *ia, int ia_size, const vector<int> &ivec);
请实现下列行为:如果两个容器大小不同,则比较相同大小部分的元素.一旦某个元素不相等,则返回false.如果所有元素都相等,则返回true.请用iterator迭代访问vector,可以以本节中例子为模型,写一个main()函数来测试is_equal()函数.

我个人认为这个题目出的有点歧义,是否两个容器大小不同,但相同部分元素如果都相等则返回true还是如果大小不同首先就返回false,而且在保持相同情况下如果所有元素相同才返回true.
就按照后一种情况,请大虾给于指导答案.
搜索更多相关主题的帖子: vector Primer int 函数 
2007-06-08 10:55
doom5211
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-6-7
收藏
得分:0 
我的答案如下,请指导:
bool is_equal(const int *ia, int ia_size, const vector<int> &ivec){
if (ivec.size()!=ia_size)
return false; //首先大小不相等就为false
const int *ptr= ia;
for(vector<int>:: iterator it= ivec.begin(); it!=ivec.end();it++) //iterator迭代访问vector
{
if(*it!=*ptr)
{ break;
return false;
}
ptr++;
}
return true;
}

2007-06-08 11:00
doom5211
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-6-7
收藏
得分:0 
我编的主程序如下:
#include<iostream>
#include<vector>
using namespace std;
bool is_equal(const int *ia, int ia_size, const vector<int> &ivec){
if (ivec.size()!=ia_size)
return false;
const int *ptr=ia;
for(vector<int>:: iterator it= ivec.begin(); it!=ivec.end();it++)
{
if(*it!=*ptr)
{ break;
return false;
}
ptr++;
}
return true;
}
void main(){
bool result;
const int ia_size=5;
int ia[ia_size]={0,1,2,3,4};
vector<int>ivec(5,0);
result=is_equal(ia,5,ivec);
if(!result)
cout<<"not equal\n"<<endl;
}

最后编译出来一个错误,我实在不知道错在什么地方:
D:\Program Files\Microsoft Visual Studio\MyProjects\2\1.cpp(8) : error C2440: 'initializing' : cannot convert from 'const int *' to 'int *'

2007-06-08 11:24
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
不是写出来了吗?有个小错误。

const int *ptr= ia;
多余了,就用ia不就好了。
beeak去掉,直接return就行了

Fight  to win  or  die...
2007-06-08 11:29
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
以下是引用doom5211在2007-6-8 11:24:27的发言:
我编的主程序如下:
#include<iostream>
#include<vector>
using namespace std;
bool is_equal(const int *ia, int ia_size, const vector<int> &ivec){
if (ivec.size()!=ia_size)
return false;
const int *ptr=ia;
for(vector<int>::const_iterator it= ivec.begin(); it!=ivec.end();it++)
{
if(*it!=*ptr)
{ break;
return false;
}
ptr++;
}
return true;
}
void main(){
bool result;
const int ia_size=5;
int ia[ia_size]={0,1,2,3,4};
vector<int>ivec(5,0);
result=is_equal(ia,5,ivec);
if(!result)
cout<<"not equal\n"<<endl;
}

最后编译出来一个错误,我实在不知道错在什么地方:
D:\Program Files\Microsoft Visual Studio\MyProjects\2\1.cpp(8) : error C2440: 'initializing' : cannot convert from 'const int *' to 'int *'

vector有很多版本的迭代器,你的vector是const类型。所以要用const_iterator去匹配,否则就出现类型不匹配的错误。


Fight  to win  or  die...
2007-06-08 13:37
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
条款26:尽量用iterator代替const_iterator,reverse_iterator和const_reverse_iterator


在Effective STL 上26条。
自己看看去,对你有帮助!

Fight  to win  or  die...
2007-06-08 13:48
neverDie
Rank: 1
等 级:新手上路
威 望:1
帖 子:123
专家分:0
注 册:2007-5-5
收藏
得分:0 
学习了!

2007-06-08 17:30
doom5211
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-6-7
收藏
得分:0 
谢谢指导,真的是好人多啊,继续努力学习啊,呵呵

2007-06-09 13:26
快速回复:求教C++Primer 上一个题目
数据加载中...
 
   



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

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