通过一个代码简要解析函数的定义与调用
来源:互联网 发布:厦门软件企业 编辑:程序博客网 时间:2024/04/30 05:16
首先来看用作例子的代码:
#include<vector>
#include<iostream>
#include<fstream>
#include<sstream>
#include<stdlib.h>
using namespace std;
typedef vector < int > VI;
typedef vector < VI > VVI;
void print (const VI&);
void input ( VVI& );
bool findVec (const VVI&,VI&);
int main()
{
VVI matrix;
input (matrix);
VI vec;
if (findVec(matrix,vec))
print (vec);
system("pause");
}
void print (const VI& v)
{
for (int i=0;i<v.size();++i)
cout<<v[i]<<" ";
cout<<"\n";
}
void input (VVI& m)
{
ifstream in ("abc.in");
int n =8, t;
m.resize(n);
for (string s;n-- && getline (in,s);)
for (istringstream sin (s); sin>>t ;m[m.size()-n-1].push_back(t));
}
bool findVec (const VVI& matrix , VI& v)
{
for (int i=0; i<matrix.size(); ++i)
for (int j=0; j<matrix[i].size(); ++j)
if (matrix[i][j]==-1)
{
v= matrix[i];
return true;
}
return false;
}
这个代码的主要功能是在一个矩阵中找其中一个元素为-1的向量,若找到,则找到的结果存放在参数v中,返回true。否则,没有结果,且返回false。程序所用的数据放在文件abc.in中。文件中第一行放向量的个数n,以便读入操作。接下来n行即n个长短不一的向量。
下面我们来逐块分析此代码。
#include<vector>
#include<iostream>
#include<fstream>
#include<sstream>
#include<stdlib.h>
using namespace std;
头定义。
typedef vector < int > VI;
typedef vector < VI > VVI;
void print (const VI&);
void input ( VVI& );
bool findVec (const VVI&,VI&);
将int类型的向量赋名为VI,将向量类型的向量赋名为VVI,定义print函数,定义input函数,定义findVec函数。
int main()
{
VVI matrix;
input (matrix);
VI vec;
if (findVec(matrix,vec))
print (vec);
system("pause");
}
这一块为主函数部分,首先我们定义一个向量类型的向量matrix。
然后调用input函数,我们跳入input函数定义模块来看这个函数的运行结果。
void input (VVI& m)
{
ifstream in ("abc.in");
int n =8, t;
m.resize(n);
for (string s;n-- && getline (in,s);)
for (istringstream sin (s); sin>>t ;m[m.size()-n-1].push_back(t));
}
可以看到,函数的形参为m,在主函数中就是matrix。
首先逐行读入abc.in中的内容并存入in中。
定义整形n,t,其中n=8.因为在abc.in中指明文件第一行放向量的个数n,笔者的abc.in中有8行数据。
因此定义n=8.将m即主函数中的matrix中的行数定义为8.
定义一个string类型的s,并使用getline函数将in逐行读入s中并将n每次减一。关于string流和getline函数的应用,在笔者的另一篇博客中有叙述,链接如下:
string流
第二个循环是指在每一行中定义一个string流sin,并将sin逐个赋值给t,将t的值用push_back函数在尾部逐个赋值给m中的每一行,两个循环完成后,abc.in中的矩阵就赋给m了。
回到主函数,可以看到这一句就是将abc.in中的矩阵赋值给matrix。
下一句,定义了一个整形向量Vec。
在if的判断条件里调用了findVec函数,我们跳入findVec函数的定义来看这一函数的运行过程。
bool findVec (const VVI& matrix , VI& v)
{
for (int i=0; i<matrix.size(); ++i)
for (int j=0; j<matrix[i].size(); ++j)
if (matrix[i][j]==-1)
{
v= matrix[i];
return true;
}
return false;
}
可以看到这一函数是布尔型的,布尔型的返回值只有两个,true和false。
可以看到前两个for循环是遍历matrix整个矩阵,后面的判断是逐个判断矩阵中像素是否有-1值,若有返回true,并将matrix中有-1的一行赋值给v。
若没有,返回false。
回到主函数,可以看到这个判断就是若检测到-1值,返回true就调用print函数,若没有检测到-1就结束程序。
下面我们跳入print函数的定义来看函数的运行过程。
void print (const VI& v)
{
for (int i=0;i<v.size();++i)
cout<<v[i]<<" ";
cout<<"\n";
}
这个函数非常简单,就是当检测到-1值,已经将有-1的那一行赋值给v以后,我们逐个输出v中元素,最后换行。
这样函数就整个讲解完了,运行结果就是,若abc.in中含有-1元素,我们最后会输出含有-1元素的那一行,若没有-1元素,就不做输出操作。
希望对大家对函数的学习有所帮助。
大家都来自己写几个整数编辑一个abc.in试试看吧。
我们下期见
- 通过一个代码简要解析函数的定义与调用
- 函数的定义与调用
- 函数的定义与调用
- PHP通过字符串调用函数的代码
- 过程、函数的定义与调用
- 第十一周 函数的定义与调用
- 九、函数的定义与调用
- JS函数的定义与调用方法
- C++函数的定义与调用
- JS函数的定义与调用方法
- python04-函数的定义、调用与递归
- javascript笔记:函数的定义与调用
- 3.1 函数的定义与调用
- JS函数的定义与调用方法
- [学习笔记]函数的定义与调用
- JS函数的定义与调用方法
- 关于函数的定义与调用
- C++函数的定义与调用
- 验证码识别程序
- node js学习(1)
- centos6.5 安装mysql5.7.19
- hdu4897
- 系统Service TelephonyManager
- 通过一个代码简要解析函数的定义与调用
- JZOJ4866【NOIP2016提高A组集训第8场11.5】禅与园林艺术
- 远程自动代答题
- 软件都是用什么语言写的
- javascript遍历节点时打印空白节点怎么办?
- rabbitmq消息队列php实际应用
- 系统服务SmsManager
- 全等
- BASH SHELL