程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c++ 函數調用在進入下一個循環的時候會再次初始化參數,將函數體直接寫進去就正常,

c++ 函數調用在進入下一個循環的時候會再次初始化參數,將函數體直接寫進去就正常,

編輯:C++入門知識

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved