关于Essential C++ 上面程序的一个问题

tony00fang 2014-04-29 11:57:52
为什么find参数里面的const会出错,这里为什么不能用const?

#include <iostream>
#include <vector>

using namespace std;

int* find(const vector<int> &vec, int value)
{
for (int ix = 0; ix < vec.size(); ++ix)
{
if (vec[ix] == value)
return &vec[ix];
}
return 0;
}

int main()
{
int num[6] = { 1, 2, 3, 4, 5, 6 };
vector<int> data(num, num + 6);
cout << *find(data, 4) << endl;

getchar();
return 0;
}
...全文
109 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyc_0204 2014-04-30
  • 打赏
  • 举报
回复
1 vector []返回的是左值,不能用于const vector &。 2 既然是const vector &,编译器会有一定的检查保证这个值不会被修改,当然加强制转换还是可以修改。
AndyStevens 2014-04-30
  • 打赏
  • 举报
回复
const int* find(const vector<int> &vec, int value)
声明改成这样
火头军 2014-04-30
  • 打赏
  • 举报
回复
for 里面 有无符号和有符号的比较,应该改成

for (size_t ix = 0; ix < vec.size(); ++ix)
buyong 2014-04-30
  • 打赏
  • 举报
回复
vec[ix]不行,如果用const,改成vec.at(ix)
tony00fang 2014-04-30
  • 打赏
  • 举报
回复
引用 2 楼 lm_whales 的回复:
可以返回值,或者返回iterator
恩,这个是个例子,所以我试试,我把程序改一下试试。
tony00fang 2014-04-30
  • 打赏
  • 举报
回复
引用 1 楼 unituniverse2 的回复:
因为find试图返回int* 应该返回const int* 顺便问一下这里为什么不直接返回int?返回指针不太安全啊(即使是const内容的指针)!反正最后你cout的时候也是加了星号的
谢谢,这个是我在Essential C++上面看到的一段程序,就敲了一下,结果编译器报错,用const int*可以?我试试,我对const理解有问题。
lm_whales 2014-04-30
  • 打赏
  • 举报
回复
可以返回值,或者返回iterator
unituniverse2 2014-04-30
  • 打赏
  • 举报
回复
因为find试图返回int* 应该返回const int* 顺便问一下这里为什么不直接返回int?返回指针不太安全啊(即使是const内容的指针)!反正最后你cout的时候也是加了星号的

65,209

社区成员

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

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