新微赢技术网
标题:
求教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