标签:
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
c++ 函数调用在进入下一个循环的时候会再次初始化参数,将函数体直接写进去就正常
标签:
原文地址:http://www.cnblogs.com/wswang/p/5082186.html