找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1912|回复: 7

求教C++Primer 上一个题目

[复制链接]
发表于 2009-11-6 01:56:01 | 显示全部楼层 |阅读模式 IP:江苏扬州
本人正在学习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.
就按照后一种情况,请大虾给于指导答案.
发表于 2009-11-6 01:56:02 | 显示全部楼层 IP:江苏扬州
我的答案如下,请指导:
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;
}
回复

使用道具 举报

发表于 2009-11-6 01:56:03 | 显示全部楼层 IP:江苏扬州
我编的主程序如下:
#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 *'
回复

使用道具 举报

发表于 2009-11-6 01:56:04 | 显示全部楼层 IP:江苏扬州
不是写出来了吗?有个小错误。

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

使用道具 举报

发表于 2009-11-6 01:56:05 | 显示全部楼层 IP:江苏扬州
以下是引用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去匹配,否则就出现类型不匹配的错误。
回复

使用道具 举报

发表于 2009-11-6 01:56:06 | 显示全部楼层 IP:江苏扬州
条款26:尽量用iterator代替const_iterator,reverse_iterator和const_reverse_iterator


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

使用道具 举报

发表于 2009-11-6 01:56:09 | 显示全部楼层 IP:江苏扬州
学习了!
回复

使用道具 举报

发表于 2009-11-6 01:56:14 | 显示全部楼层 IP:江苏扬州
谢谢指导,真的是好人多啊,继续努力学习啊,呵呵
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-10-1 19:28 , Processed in 0.253924 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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