设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 1912|回复: 7
打印 上一主题 下一主题

求教C++Primer 上一个题目

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-6 01:56:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人正在学习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.
就按照后一种情况,请大虾给于指导答案.
2#
发表于 2009-11-6 01:56:02 | 只看该作者
我的答案如下,请指导:
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;
}
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-6 01:56:03 | 只看该作者
我编的主程序如下:
#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 *'
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-6 01:56:04 | 只看该作者
不是写出来了吗?有个小错误。

const int *ptr= ia;
多余了,就用ia不就好了。
beeak去掉,直接return就行了
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-6 01:56:05 | 只看该作者
以下是引用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去匹配,否则就出现类型不匹配的错误。
回复 支持 反对

使用道具 举报

6#
发表于 2009-11-6 01:56:06 | 只看该作者
条款26:尽量用iterator代替const_iterator,reverse_iterator和const_reverse_iterator


在Effective STL 上26条。
自己看看去,对你有帮助!
回复 支持 反对

使用道具 举报

7#
发表于 2009-11-6 01:56:09 | 只看该作者
学习了!
回复 支持 反对

使用道具 举报

8#
发表于 2009-11-6 01:56:14 | 只看该作者
谢谢指导,真的是好人多啊,继续努力学习啊,呵呵
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-19 16:37 , Processed in 0.076511 second(s), 9 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表