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

关于Essential C++ 上面程序的一个问题
为什么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;
}

------解决方案--------------------
因为find试图返回int*
应该返回const int*
顺便问一下这里为什么不直接返回int?返回指针不太安全啊(即使是const内容的指针)!反正最后你cout的时候也是加了星号的
------解决方案--------------------
可以返回值,或者返回iterator
------解决方案--------------------
vec[ix]不行,如果用const,改成vec.at(ix)
------解决方案--------------------
for 里面 有无符号和有符号的比较,应该改成

for (size_t ix = 0; ix < vec.size(); ++ix)

------解决方案--------------------
const int* find(const vector<int> &vec, int value)

声明改成这样
------解决方案--------------------
1 vector []返回的是左值,不能用于const vector &。
2 既然是const vector &,编译器会有一定的检查保证这个值不会被修改,当然加强制转换还是可以修改。