c++学习系列

前言

以前在学校的时候学过c++的课程,会写一些基本的c++程序,但是对于工程上c++关于项目的构建了解甚少。因此开这个系列的原因在于记录一下一个基本的c++工程是怎样组织的,而不是仅仅会写c++ 函数。同时也督促自己捡起c++的知识。

c++ 之main 函数

 

主函数是一个特殊的函数,不管把它放在代码的什么位置,每个程序的运行都是从主函数开始的。所以,我们说每个程序有且只能有一个主函数,否则电脑将不知道从何运行。既然电脑知道必须有且只能有一个主函数,那么就没必要去写主函数的函数原型了。

主函数也能返回值。根据最新的ANSI C++标准,主函数应该返回一个整型数值,返回这个值的目的是为了将程序的运行结果告知系统,比如程序是否正常结束,是否异常终止等等。一般地,如果返回0表示程序正常结束,返回其他值则表示程序异常终止。

C++有许多不同的编译器,如VC++、BC、gcc等等。由于各种编译器产自不同的公司,在某些细节方面有一些区别。然而这些区别却像C++语法的各种“方言”,让用户掌握起来非常头疼。于是美国国家标准机构(American National Standards Institute)着手制定了C++的国际化标准,按照该标准的C++语法和编译器无关。目前市面上大多数的编译器都尽量向该标准靠拢。

在c++的标准中,允许主函数有多个参数或者没有参数,按照惯例写法如下。

int main(int argc, char *argv[])
第一个参数argc,指明有多少个参数将被传递给主函数main(),真正的参数以字符串数组(即第2个参数argv[])的形式来传递。每一个字符串均有自己意思。在这句法上面, 记住, argc代表参数的数量, main()函数本身是在索引0为的第一参数。 所以, argc总是至少为1 。它的总数是从argv列阵的元素数目。 这意味着, argv[0]的值是至关重要的。 如果用户在控制台环境中程序名称后键入含参数的指令, 那么随后的参数将传递给argv[1]。

 

c++的库文件

写python比较多,就和python 做一个类比吧。我们在写程序时,除了用三种结构(顺序,循环,条件)写出自己的程序外,为了方便,可以调用一些自带的库。c++ 的库分为标准库和第三方库。

标准库就是你安装一个编译器之后,该编译器自带的一些库。可以这样理解,当你装了一个python环境时,该环境包含一个python 解释器和一些基础的包(可以直接import 而不需要pip install),有了这些我们就可以写一个python 程序并运行起来了。

同理在c++中标准库就相当于是是编译器自带的一些基础库。值得一提的是,与python 不同的是python的解释器是唯一的。而c++的编译器有许多种,这许多中编译器直接可能存在着一些微小的差别,在linux 下用的比较多的是gcc,g++。

 

首先来说一下标准库文件,谈到标准库文件就必须谈到std了,关于这一部分参考了std详细说明

std::是个名称空间标识符,C++标准库中的函数或者对象都是在命名空间std中定义的,所以我们要使用标准库中的函数或者对象都要用std来限定。

至于为什么将cout放到名字空间std中,是因为象cout这样的对象在实际操作中或许会有好多个,比如说你自己也可能会不小心定义一个对象叫cout,那么这两个cout对象就会产生冲突。

那么std都是在什么时候使用?

一般来说,std都是要调用C++标准库时使用。比如:使用标准库文件iostream时,要写上std;使用非标准库文件iostream.h,不用写。如图引入非标准库iostream.h时,省去了std::

当然使用标准库时,也是可以省略的,不过需要进行处理

1.分别将cout和endl释放出来

2. 将命名空间释放出来

注:using namespace std 告诉编辑器我们将要使用名字空间std中的函数或者对象,所以cout和endl前面不用注明他们是std这个名字空间中的cout和endl

 

#include <iostream>
#include <vector>//vector 向量
#include <algorithm>//sort 函数
using  namespace std;



int findchild(vector<int> &children,vector<int>& cookies);//函数声明,声明必须在调用之前

int main(void){
    vector<int> a = {1,2};/*向量初始化*/
    vector<int> b = {1,2,3};
    int c;
    c = findchild(a,b);
    std::cout<<c<<endl;
    return 0;
}
int findchild(vector<int> &children,vector<int>& cookies){
    sort(children.begin(),children.end());
    sort(cookies.begin(),cookies.end());
    int cookie =0,child =0;
    while(child<children.size() && cookie<cookies.size()){//循环条件,孩子和饼干都没用完,
        if (children[child]<=cookies[cookie])child++;
        cookie++;//如何孩子饥饿度小于饼干,下一个孩子,否则调整饼干
    }
    return child;}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值