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

时间: 2024-08-02 04:28:03

c++ 函数调用在进入下一个循环的时候会再次初始化参数,将函数体直接写进去就正常的相关文章

腾讯入局区块链,这会是腾讯的下一个连接器吗?

两年前的腾讯全球合作伙伴大会上,腾讯董事会主席兼 CEO 马化腾曾发表致合作伙伴公开信,强调互联网将更多连接用户的需求,微信.QQ都是在做连接器.到了2015年,一个极有可能成为下一个连接器的新技术出现,即区块链. 作为比特币的底层技术,区块链已经突破了金融行业,特别是随着联盟链技术的出现,让区块链有可能成为"互联网+"的核心连接技术.而在2015年5月的贵阳大数据博览会上,马化腾曾强调"互联网+"也是一种连接的能力.那么,腾讯自然不会缺席区块链,也就是"

数据结构——栈——寻找下一个较大元素

题目描述 给出一个数组,向右寻找每一个元素的下一个较大的元素,没有更大的则为-1 举例 {4,6,1,3,2,5} 则求得的答案应为 {6,-1,3,5,5,-1} 题目分析 首先对于这样的题目,我们总是先想到最简单的,那么就是枚举,每次循环一个元素,不停的向右找就可以了.时间复杂度应该是n^2 但是这样肯定是不够用的. 然后我们考虑,这道题我们实际上遇到的问题是什么? 其实简单的说,这道题的意思是,在变化的数组中找到下一个较大的值. 难点在于,数组元素的变化,以及不是找最大值,而是找下一个较大

Cocos2d-x3.0下实现循环列表

本文的实现是參照我之前在做iOS时实现的一个能够循环的列表这里用C++重写一遍. 效果: 原文地址:http://blog.csdn.net/qqmcy/article/details/27393011 用法:能够使用创建project时的HelloWorld測试 ,h文件里加入循环列表的监听回调 void djInfiniteScroll(Ref* sender); .cpp #include "DJInfiniteScrollPicker.h" DJInfiniteScrollPi

手机影音第七天 视频的播放下一个视频功能实现,视频进度、电量变化的实现

先看下效果图: 在这里,视频进度条会根据视频播放变化,下方的按钮中,播放下一个,上一个都已实现. 代码已经托管到码云上,想下载看的小伙伴可以从下方地址中获取 https://git.oschina.net/joy_yuan/MobilePlayer 1.在这张图上,自定义的显示电量的那一列已经被系统自带的状态栏遮盖,下面就说一下实现方法: 系统电量变化时,系统会发送一个广播,所有对这个广播感兴趣的activity都可以注册广播来接收这个广播.在这里接收系统电量变化,屏幕锁屏.开屏的广播,只能使用

寻找二叉查找树中的下一个结点

一,问题描述 给定一棵二叉查找树,以及某个结点的值.查找该结点的下一个结点.如果该结点是最大的,则返回 null 对于二叉查找树而言,它是中序遍历有序的.某结点的下一个结点 就是:中序遍历输出的下一个结点. 二,问题分析 假设需要查找 node 结点的下一个结点,需要考虑三种情况: ①node 节点有右孩子 下一个结点就是以node结点的右孩子为根的子树中的最左下结点.如下图:node=8,它的下一个结点为12. ②node 节点没有右孩子时,node节点是其父结点的左孩子.如下图,结点8的下一

stl 之 next_permutation 求出一个排序的下一个排列的函数 转载

这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件<algorithm>下面是以前的笔记    与之完全相反的函数还有prev_permutation  (1) int 类型的next_permutation int main(){ int a[3];a[0]=1;a[1]=2;a[2]=3; do{cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<

强制获取序列下一个值/当前值(oracle函数)

推荐 作者:靓仔小伙计 作者:周公 oracle创建序列: 先假设有这么一个表: create table S_Depart ( DepartId INT not null, DepartName NVARCHAR2(40) not null, DepartOrder INT default 0, constraint PK_S_DEPART primary key (DepartId) ); 在Oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的

18.n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除第m个数字。 求出在这个圆圈中剩下的最后一个数字。

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4263868.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字). 当一个数字

Java 螺旋数组的实现方式-一个循环实现哦

随着编程的学习和工作,感触越来越深的,就是如何做好对需求的理解.那么在学习的过程中,就是如何将一个实际问题,转化成计算机语言去实现.我觉得我的这方面的能力很是欠缺啊. 今天分享一下一个螺旋数组例子的分析: 贴上code: package excesize; /* * 螺旋数组: * 4 * 1 2 3 4 * 12 13 14 5 * 11 16 15 6 * 10 9 8 7 */ public class LuoxuanArray { public static void main(Stri