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

帮忙修改一下程序,谢谢

bclee 发布于 2008-01-22 11:27, 770 次点击
# include <iostream>
# include <vector>
  using namespace std;
  vector <int>::const_iterator find_val ( vector <int>::const_iterator beg , vector <int>::const_iterator end,int value , vector <int>::size_type &occurs);
 void main()
{  int i ;
   vector<int>::size_type ctr;
   /*vector<int> vec;
    *cout << "please enter num "<<endl;
    *while (cin>>i)
    *{ if ( i = 0)      有朋友说 i=0 是错的,到底怎么错呢? 是因为如果输入的数字不是0就退出while循环,没有给容器添加元素? 还是语法错误呢?           
    *  break;
    *  else                怎么 实现 给容器vec添加一定元素(数字)后,输入一个操作退出while循环?
    *   vec.push_back(i);   
    * }
    */
 int num[] = {1, 2, 3, 8, 9, 4, 5, 8, 7, 8}
 vector<int> vec (num, sizeof(num)/sizeof(num([0]));
 vector<int> ::const_iterator iter;
   iter = find_val ( vec.begin() ,vec.end(), 8,ctr);
   cout << *iter << ctr <<endl;

  }
vector <int>::const_iterator find_val ( vector <int>::const_iterator beg , vector <int>::const_iterator end,int value , vector <int>::size_type &occours)
{
 vector <int> ::const_iterator res_iter = end;
 occours = 0;
 for ( ; beg != end; ++end)
 { if (*beg == value ){
       if ( res_iter == end)
           res_iter = beg;
       ++occours;
 }
 }
 return res_iter;
 }

编译没有错误,就是不能显示ctr,和迭代器,我的目的是定义既返回一个迭代器又返回出现满足要求元素次数的函数!!!

[[italic] 本帖最后由 bclee 于 2008-1-22 15:39 编辑 [/italic]]
5 回复
#2
zabbey2008-01-22 15:13
一眼就看到一个错误:if ( i = 0)
#3
zabbey2008-01-22 15:28
for ( ; beg != end; ++end)
改为for ( ; beg != end; ++beg)
LZ好粗心啊!
#4
bclee2008-01-22 15:42
原帖由 [bold][underline]zabbey[/underline][/bold] 于 2008-1-22 15:28 发表 [url=http://bbs.bccn.net/redirect.php?goto=findpost&pid=1185737&ptid=198279][/url]
for ( ; beg != end; ++end)
改为for ( ; beg != end; ++beg)
LZ好粗心啊!

谢谢 !!
#5
lonmaor2008-01-22 16:31
程序代码:
#include <iostream>
#include <vector>

#define cpivec vector<int>::const_iterator
using namespace std;

cpivec find_val (cpivec beg, cpivec end, int value, vector <int>::size_type &occurs);

int main()
{  
    int i ;
    vector<int>::size_type count;
    vector<int> vec;
    cout << "please enter several numbers: "<<endl;
    cin>>i;
        //输入0以结束输入
    while (i != 0)
    {
        vec.push_back(i);
        cin>>i;
    }
   
//  num[] = {1, 2, 3, 8, 9, 4, 5, 8, 7, 8};
//    vector<int> vec (num, sizeof(num)/sizeof(num([0]));
    vector<int> ::const_iterator iter;
    iter = find_val (vec.begin() ,vec.end(), 8, count);
    cout << *iter << endl
         << count <<endl;
    return 0;
}


cpivec find_val (cpivec beg, cpivec end, int value, vector <int>::size_type &occours)
{
        // 返回指向最后一个找到元素的迭代器
        // 如果找不到,则返回vec.end()
    vector <int> ::const_iterator res_iter = end;
    occours = 0;
    for ( ; beg != end; ++beg)
    {
        if (*beg == value )
        {
//            if ( res_iter != end)
//                 res_iter = beg;
                // 一旦找到则将beg赋值给res_iter
            res_iter = beg;
            ++occours;
        }
    }
    return res_iter;
}
#6
FireG2008-01-22 20:02
if ( i = 0) 。。。。if(i==0)吧
1