新微赢技术网

标题: 求教C++Primer 上一个题目 [打印本页]

作者: ご倾城↘恋    时间: 2009-11-6 01:56
标题: 求教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.
就按照后一种情况,请大虾给于指导答案.
作者: 缘分天空    时间: 2009-11-6 01:56
我的答案如下,请指导:
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;
}
作者: cs牛人    时间: 2009-11-6 01:56
我编的主程序如下:
#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
不是写出来了吗?有个小错误。

const int *ptr= ia;
多余了,就用ia不就好了。
beeak去掉,直接return就行了
作者: 为爱种菜!    时间: 2009-11-6 01:56
以下是引用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去匹配,否则就出现类型不匹配的错误。
作者: 僞o碬侎〾    时间: 2009-11-6 01:56
条款26:尽量用iterator代替const_iterator,reverse_iterator和const_reverse_iterator


在Effective STL 上26条。
自己看看去,对你有帮助!
作者: 往事如烟    时间: 2009-11-6 01:56
学习了!
作者: Bu怕Bu怕    时间: 2009-11-6 01:56
谢谢指导,真的是好人多啊,继续努力学习啊,呵呵




欢迎光临 新微赢技术网 (http://bbs.weiying.cn/) Powered by Discuz! X3.2