注册 登录
编程论坛 C++教室

请问大侠一个关于返回vector迭代器的问题

tornador 发布于 2010-10-07 21:08, 2398 次点击
#include<iostream>
#include<vector>
using namespace std;
vector<int>::iterator search(vector<int> vec,int n)
{
    for(vector<int>::iterator iter=vec.begin();iter!=vec.end();iter++)
    {
        if(*iter==n)
        {
        
        return iter;
        }
    }

    return NULL;
}
void main()
{
    vector<int> test;
    int num;
    cout<<"please input the members"<<endl;
    for(int i=0;i<5;i++)
    {
        cin>>num;
        test.push_back(num);
    }
    cout<<"please input the num you want to search"<<endl;
    cin>>num;
    vector<int>::iterator temp=search(test,num);
    if(!temp==NULL)
        cout<<*temp;
    else
        cout<<"the num  "<<num<<"  doesn't exist"<<endl;
}
问为什么运行之后,能找到,但输出*temp却是一个未定义的值。
4 回复
#2
mxs8102010-10-08 11:55
这个函数vector<int>::iterator search(vector<int> vec,int n)
{
    for(vector<int>::iterator iter=vec.begin();iter!=vec.end();iter++)
    {
        if(*iter==n)
        {
        
        return iter;
        }
    }

    return NULL;
}

退出函数时,返回的迭代器已经无效,建议直接返回值
#3
无名可用2010-10-08 19:53
楼上说的对,search(vector<int> vec,int n)句中,你只传了个拷贝,最好还是传引用,
search(vector<int> &vec,int n)
因为你传的是拷贝,所以iter是一个局部指针,当函数结束时分配给vec的内存被回收。。
#include<iostream>
#include<vector>
using namespace std;
vector<int>::iterator search(vector<int> &vec,int n)
{
    for(vector<int>::iterator iter=vec.begin();iter!=vec.end();iter++)
    {
        if(*iter==n)
        {
        
        return iter;
        }
    }

    return NULL;
}
void main()
{
    vector<int> test;
    int num;
    cout<<"please input the members"<<endl;
    for(int i=0;i<5;i++)
    {
        cin>>num;
        test.push_back(num);
    }
    cout<<"please input the num you want to search"<<endl;
    cin>>num;
    vector<int>::iterator temp=search(test,num);
    if(!temp==NULL)
        cout<<*temp;
    else
        cout<<"the num  "<<num<<"  doesn't exist"<<endl;
}
#4
tornador2010-10-08 21:13
是这样,题目要求返回一个迭代器,我也尝试过定义一个全局变量。但还是有问题~~~~
#5
mxs8102010-10-09 13:23
你把vector<int>::iterator search(vector<int> vec,int n)定义成
vector<int>::iterator search(vector<int> *vec,int n)就应该符合你的要求了.
1