函数返回vector迭代器对象的有关问题

函数返回vector迭代器对象的问题.

#include <iostream>
#include <vector>

using namespace std;

vector<int>::iterator findIter(vector<int>,int);

int main(int argc, char* argv[])
{
vector<int> ivec ;
ivec.push_back(0);
ivec.push_back(1);
ivec.push_back(2);
ivec.push_back(3);
ivec.push_back(4);
ivec.push_back(5);
vector<int>::iterator it = findIter(ivec,2);
vector<int>::iterator last = ivec.end();
if (it != last)         //这里不能比较,我调试到这里就出错了.实在是不知道为什么,我用的是Visual Studio 2013 Express.
{
cout << "find a num " << endl;
}
else
{
cout << "no find a num" << endl;
}
return 0;
}

vector<int>::iterator findIter(vector<int> ivec,int num)
{
vector<int>::iterator beg = ivec.begin();
while (beg != ivec.end())
{
if (*beg == num)
{
return beg ;
}
++beg;
}
return beg;
}




第十九行的,不知道为什么会这样,求各位大大能解释一下,小弟不胜感激.

------解决方案--------------------
提示什么错误,我在gcc下编译运行没有问题。
------解决方案--------------------
这是对的,你返回的是一个局部vector的iterator,返回之后它就被销毁了,所以你一定要这么做的话可以改成下面这样子:

vector<int>::iterator findIter(const vector<int>& ivec,int num)
{
    vector<int>::iterator beg = ivec.begin();
    while (beg != ivec.end())
    {
        if (*beg == num)
        {
            return beg ;
        }
        ++beg;
    }
    return beg;
}
------解决方案--------------------
引用:
这是对的,你返回的是一个局部vector的iterator,返回之后它就被销毁了,所以你一定要这么做的话可以改成下面这样子:

vector<int>::iterator findIter(const vector<int>& ivec,int num)
{
    vector<int>::iterator beg = ivec.begin();
    while (beg != ivec.end())
    {
        if (*beg == num)
        {
            return beg ;
        }
        ++beg;
    }
    return beg;
}

+1

返回的是局部的(已销毁的)迭代器,而不是传入的vector的迭代器。
在C++中传递参数时尽量使用引用,而不要直接传值,如果不需要修改则添加const
------解决方案--------------------
我的意思是VS报的错误逻辑是合理的,它本来就不是一个有效的值了。
另外,我想只要这两个迭代器(beg 和 ivec.end)不是指向同一个vector,在VS里也应该会报这个问题。
------解决方案--------------------
try using the following code


vector<int>::iterator it = std::find(ivec.begin(),ivec.end(),2);
if(it != ivec.end())