zoukankan      html  css  js  c++  java
  • c++ 函数调用在进入下一个循环的时候会再次初始化参数,将函数体直接写进去就正常

     1 #include"stdafx.h"
     2 #include"string"
     3 #include<iostream>
     4 #include<vector>
     5 
     6 #include<string.h>
     7 using namespace std;
     8 
     9 int add_color(vector<string> v1, vector<int> v2, string s)
    10 {
    11     cout << v1.size() << " " << v2.size() << endl;
    12     //cout << "test" << endl;
    13     if (v1.size() == 0)
    14     {
    15         
    16         v1.push_back(s);
    17         v2.push_back(1);
    18     //    cout << v1[0];
    19     }
    20     
    21     else
    22     {
    23         int i = 0;
    24         for (; i<v1.size();)
    25         {
    26             if (!strcmp(v1[i].c_str(), s.c_str()))
    27             {
    28                 v2[i]++;
    29                 //i++;
    30                 break;
    31             }
    32             else
    33             {
    34                 i++;
    35             }
    36 
    37         }
    38         if (i == v1.size())
    39         {
    40             v1.push_back(s);
    41             v2.push_back(1);
    42         }
    43     }
    44 
    45     cout << v1.size() << " " << v2.size() << endl;
    46 
    47     return 0;
    48 }
    49 
    50 int find_max(vector<string> v1, vector<int> v2)
    51 {
    52     int max;
    53     max = 0;
    54     for (int i = 0; i<v2.size() - 1; i++)
    55     {
    56         for (int j = i + 1; j<v2.size(); j++)
    57         {
    58             if (v2[i] <= v2[j])
    59             {
    60                 max = j;
    61             }
    62         }
    63     }
    64     return max;
    65 }
    66 
    67 int main(void)
    68 {
    69     int N;
    70     cout << "input N:";
    71     cin >> N;
    72 
    73     vector<string> v1;
    74     vector<int> v2;
    75     string s;
    76 
    77     while (N)
    78     {
    79         //string s;
    80         cin >> s;
    81         add_color(v1, v2, s);
    82         //add_color(v1, v2, s);
    83         cout << v1.size() << endl;
    84         N--;
    85     }
    86 
    87     cout << endl;
    88     int max = find_max(v1, v2);
    89     cout << v1[max] << endl;
    90 
    91 }

    在调用add_color的时候,无法正常执行下去,将函数体直接写在循环里就没有问题

    问了别人,是参数调用的问题

    C++参数调用有三种,值传递,指针传递,引用传递

    值传递实际上只是传递的实际参数的一个副本,并不是原参数,这样的原因是可以实现对实际参数的保护;

    指针传递,则传递的是地址;

    引用传递,对形参的操作等同于对实参的操作,即传递的不会是实参的副本,而是实参;

    具体的例子可以看一下http://www.cnblogs.com/Romi/archive/2012/08/09/2630014.html

  • 相关阅读:
    对实时的视屏流进行处理
    opencv读取并播放avi视屏
    opencv中读取显示图像
    为什么既要有IP地址还要有MAC地址
    继承中构造、析构 与 拷贝构造、赋值中的调用区别
    拷贝构造函数和赋值符函数——转
    inline修饰虚函数的问题
    菱形继承产生的问题及解决
    迭代器模式
    备忘录模式
  • 原文地址:https://www.cnblogs.com/wswang/p/5082186.html
Copyright © 2011-2022 走看看