| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2398 人关注过本帖
标题:请问大侠一个关于返回vector迭代器的问题
只看楼主 加入收藏
tornador
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:34
专家分:118
注 册:2010-10-4
结帖率:80%
收藏
已结贴  问题点数:4 回复次数:4 
请问大侠一个关于返回vector迭代器的问题
#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却是一个未定义的值。
搜索更多相关主题的帖子: vector 
2010-10-07 21:08
mxs810
Rank: 9Rank: 9Rank: 9
来 自:火星
等 级:贵宾
威 望:16
帖 子:234
专家分:1122
注 册:2006-10-19
收藏
得分:1 
这个函数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;
}

退出函数时,返回的迭代器已经无效,建议直接返回值

授人以鱼不如授人以渔
2010-10-08 11:55
无名可用
Rank: 4
等 级:业余侠客
帖 子:79
专家分:259
注 册:2010-7-27
收藏
得分:1 
楼上说的对,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;
}
收到的鲜花
  • mxs8102010-10-09 13:25 送鲜花  3朵   附言:我很赞同
2010-10-08 19:53
tornador
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:34
专家分:118
注 册:2010-10-4
收藏
得分:0 
是这样,题目要求返回一个迭代器,我也尝试过定义一个全局变量。但还是有问题~~~~
2010-10-08 21:13
mxs810
Rank: 9Rank: 9Rank: 9
来 自:火星
等 级:贵宾
威 望:16
帖 子:234
专家分:1122
注 册:2006-10-19
收藏
得分:2 
你把vector<int>::iterator search(vector<int> vec,int n)定义成
vector<int>::iterator search(vector<int> *vec,int n)就应该符合你的要求了.

授人以鱼不如授人以渔
2010-10-09 13:23
快速回复:请问大侠一个关于返回vector迭代器的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017548 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved