C++基本语法

C++基本语法与细节部分

1.cin.get(),getchar()可以实现控制台不立马结束,会等你再次输入时结束;
2.如果c++没有写using namespace std;的话,这个声明是为了在内存区开辟空间,在每个调用c++的相关内容中加入std::即可;例如:
cout<<“hello”<<endl;—>std::cout<<“hello”<<std::endl;
3.在c++中为了命名规范,没有#include<stdio.h>这样形式的头文件,调用时要#include< cstdio >
4.cin的速度比scanf慢很多,特别是在大量数据时,就会显示出来,建议在竞赛时写scanf与printf,养成良好的习惯。
5.在命名变量时不要用一些函数库的名字命名,否则会报错,int cout,sort等等,在输入时cin和scanf一样遇空格结束,c中是利用gets()来输入一行字符串(包括空格),而c++中是利用cin.getline(char,size),或者是getline(cin,char);需要注意的是第一种输入第一个参数必须是char类型,不能是string类型,在cin库中没有重载的string,size;而第二种是c++自身的库,既可以getline(cin,char),也可以是getline(cin,string);
6.在输出保留多少位小数时,printf也方便很多,在c++中输出则要用到< iomanip>头文件,用cout.setprecistion(int digit)来修改精度
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    double s=1.34555;
    cout<<fixed<<setprecision(2);//写入该语句后输出时都保留相应的精度
    cout<<"s="<<s<<endl;//s=1.35 输出四舍五入
    double d=0.3455;
    cout<<"d="<<d<<endl;//d=0.35
}

c++语法特性

1.c++新增bool,c中没有bool类型,其值输出为0(false),1(true);
2.c语言动态开辟内存是要int *p=(int *)malloc(10 * sizeof(int));//开辟一个40个字节的内存区,指针p指向该内存;而c++只需要int *p=new int[40]; 删除内存为delete []p;(这些操作基本在ACM中用不到,只会出现在平时的题目里);且c++不支持变长数组,只会用new或者vector来创建可变(动态)数组;c语言是支持的;因为c++是兼容c,所以在编译器若在c++头文件中编译,也会成功;但并不代表c++支持变长数组;在c++中虽然没有指针,但可以有&引用,int & a类似于int * a;
int num=10;
int a[num];//变长数组
3.在c++里面结构体可以直接struct node{结构体内容};调用只需node a;//声明一个复合变量,不需要在c中那样typedef struct node{结构体内容}node; node a;且结构体里面也可构造函数
#include<iostream>
using namespace std;
int main()
{
    struct node
    {
       int a=2;
       int b;
        node(int h){
        a=h;
        }
        node(){
        }
    };
    node no1=node();
    node no2=node(1);
    cout<<no1.a<<endl;//a=2
    cout<<no2.a<<endl;//a=1
}

c++标准库(STL)

1.cstring和string完全不一样的头文件,一个是c语言的头文件,一个是c++的头文件。cstring中的strlen(),strcmp(),strcpy(),memset()暴力清空,memcpy()暴力拷贝,其中memset(a,0,sizeof a);该清空函数是一个字节一个字节的置成0,只有memset(a,0,sizeof a)和memset(a,-1,sizeof a)有实用,他会把这个数组的每个值变为0或-1;
2.< cmath >中还有浮点求整函数,
ceil()、floor()、round()包含在cmath库中,int()为强制类型转换
  • ceil()向上取整,朝正无穷方向取整

  • floor()向下取整,朝负无穷方向取整

  • int()向零取整

  • round()四舍五入

    #include<iostream>
    #include<cstring>
    #include<cmath>
    using namespace std;
    int main()
    {
        double s=1.539;
        cout<<ceil(s)<<endl;//s=2
        cout<<floor(s)<<endl;//s=1
        cout<<int(s)<<endl;//s=1
        cout<<round(s)<<endl;//s=2
        cout<<round(1.3)<<endl;//1
    }
    
    

vector的基本操作

3.< ctime >头文件里面有time(0)//指从1970年到现在的秒数(配合随机数)srand(time(0))产生随机种子;< ctype >里面有isdigit(),isalpha(),判断字符是否为数字、大小写字母;但isalpha()还有一种使用方法,里面还可以是数字判断ascall码是否为一个大小写字母,如果是大写字母则输出1,则小写字母输出2,否则为0;

上述c标准库里面的函数只需了解即可,在真正acm时基本无需知道这些方法,自己写也可以。

4.vector< int> list动态数组,size()是指数组的大小;当使用vector迭代器iterator;vector< int>::iterator p;迭代器为p,p=list.begin(),list.end()是动态数组最后一个的后一个,所以遍历时可以p++,p!=list.end();迭代器取值可以*p;
5.clear()清空容器,empty()判断容器是否为空;erase(i)删除元素push_back(i)是从数组尾部插入一个元素i,pop_back()是将尾部删除一个数据;
6.string与vector的操作基本相同,在vector里面可以使用的函数,在string也可以使用,string还有的函数为insert(2,‘a’),str1.append(str2),{类似于str1+=str2},str1.compare(str2);
7.头文件algorithm,里面又很多算法函数,如sort(),sort可以自定义,也可以默认为升序,若里面为容器,则应该sort(a.begin(),a.end());
8.nth_element(a.begin(),a.begin()+k,a.end());这个函数中间三个参数为容器迭代器,时间复杂度为O(n),可以求出第k个动态数组的值;
9.reverse(a.begin(),a.end()),可以翻转一个vector数组,简化代码,unique(a.begin,a.end());

创作不易,希望大家点赞小白的博客,小白感激不尽

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值