中一道 基础题

llsll21 2009-02-22 04:08:17
我看<C++ primer >(第三版)的第三章时有这样一道练习题:

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

我自己写了程序如下:

#include <iostream>
#include <string>
#include <vector>
using namespace std;

bool is_equal ( const int *a, int ia_size, const vector<int> &ivec );


void main()
{
const int ia[] = {0,1,2,3,4,5,6};
vector<int> ivec (ia , ia+7);

bool flag = is_equal( ia, 7, ivec);

if (flag)
cout<<"true"<<endl;
else
cout<<"false"<<endl;


}


bool is_equal ( const int *a, int ia_size, const vector<int> &ivec )
{
int vec_size = ivec.size();
if( vec_size == ia_size)
{
int i = 0;
for ( vector<int>::iterator it = ivec.begin(); it != ivec.end(); ++it)//此行有错误
{
if(a[i] != *it)
return false;
++i;
}
return true;
}
else
{
int m_size = vec_size < ia_size ? vec_size:ia_size;

for ( int i = 0; i < m_size; ++i)
{
if(a[i] != ivec[i])
return false;
}
return true;
}

}

程序必须把红色的const去掉才能运行,要不然会报错说不能将 const int * 型转成 int * 型。

我在ivec声明时前面加上const也不行,请问怎么写才能使程序如题中要求的那样形参为const型?
...全文
165 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2009-02-24
  • 打赏
  • 举报
回复
iterator_const
herman~~ 2009-02-24
  • 打赏
  • 举报
回复
常量必须使用const iterator
不然常量会被修改
llsll21 2009-02-24
  • 打赏
  • 举报
回复
谢谢大家,我也看这本书的答案了,
里面用的是const_iterator,只是书中讲解时例子是
<int>::iterator,所以我就用iterator,
刚才查了下vector文件,里面有这样一句话:

iterator begin()
{return (_First); }

const_iterator begin() const
{return ((const_iterator)_First); }

也就是iterator和const_iterator都有定义,
只是有一个返回的是const型的。。呵呵,我是这
样理解的。
sincor 2009-02-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chunyuran 的回复:]
iterator 要用const_iterator,就是你出错的那句
[/Quote]
UndefinedCoder 2009-02-23
  • 打赏
  • 举报
回复
#include "stdlib.h"
#include <iostream>
#include <string>
#include <vector>

using namespace std;

bool is_equal ( const int *a, int ia_size, const vector<int> &ivec )
{
vector<int>::const_iterator iv=ivec.begin();
for(int i=0;i<(ia_size<(int)ivec.size()?ia_size:(int)ivec.size());i++,iv++)
{
if (a[i]!=*iv)
return false;
}
return true;
}

int main(void)
{
const int ia[] = {0,1,2,3,4,5,6};
vector<int> ivec (ia , ia+7);
for(vector<int>::iterator iv=ivec.begin();iv!=ivec.end();iv++)
cout<<*iv<<endl;
if (is_equal(ia, 7, ivec))
cout<<"true"<<endl;
else
cout<<"false"<<endl;
return EXIT_SUCCESS;
}
Gary@Tokyo 2009-02-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hairetz 的回复:]
引用 1 楼 chunyuran 的回复:
iterator 要用const_iterator,就是你出错的那句

1楼指出了问题,应该可以揭帖了。
[/Quote]
问题已经解决,可以结贴了
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chunyuran 的回复:]
iterator 要用const_iterator,就是你出错的那句
[/Quote]
1楼指出了问题,应该可以揭帖了。
thesecretblue 2009-02-22
  • 打赏
  • 举报
回复
我帮你编译了一下,情况如下:
1.程序必须把红色的const去掉才能运行,其实对于形参是非const 还是const(实参是非const),都是可以的,只不过在改变指针指向时有点区别:
2.for ( vector <int>::iterator it = ivec.begin(); it != ivec.end(); ++it)//此行有错误
改为:for ( vector <int>::iterator it = (int *)ivec.begin(); it != ivec.end(); ++it) 试试!!!!可保持形参为const型?
太乙 2009-02-22
  • 打赏
  • 举报
回复
const vector de iterator de yong const_iterator!

zheyang:


vector<int>::const_iterator constIt = ivec.begin();
waizqfor 2009-02-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 llsll21 的帖子:]
我看 <C++ primer >(第三版)的第三章时有这样一道练习题:

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

我自己写了程序如下:

#inc…
[/Quote]
iterator改成const_iterator LZ你自己弄错了
airtrack 2009-02-22
  • 打赏
  • 举报
回复
for (vector <int>::const_iterator it = ivec.begin(); it != ivec.end(); ++it)
把iterator改成const_iterator。
chunyuran 2009-02-22
  • 打赏
  • 举报
回复
iterator 要用const_iterator,就是你出错的那句

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧