C++ 语言基础

1.C++版本区别与选择

C++98 (ISO/IEC 14882:1998)

C++的第一个版本于1998年10月发布。有一些较老的oj在使用。

C++03(ISOIEC 14882:2003)

在这个版本的C++中,值初始化是在2003年2月引入的.

C++11(蓝桥杯选用)

它于2011年8月发布。这个C++修订版引入Lambda表达式、委托构造函数、统一初始化语法、自动类型推导auto、nullptr.、decltype、Rvalue、References等。

C++14

它于2014年8月发布。此版本中添加的功能包括多态 lambda、数字分隔符、通用lambda捕获、变量模板、二进制整数文字、引用字符串等。

C++17

它于2017年12月发布。它引入了折叠表达式、十六进制浮点文字、u8字符文字、带有初始化程序的选择语句、内联变量等。

C++20

它于2020年12月发布。包括的一些新功能包括:测试宏3路比较、运算符<=>和运算符==()=默认值、新属性:[no_unique_address]]、[[likely]、[[不太可能]]


2.C++输入和输出

#include <stdio.h>

double x;

char str[20];

输入 scanf(“%lf”,&x);

     scanf(“%s”,str);

输出 printf(“%.3lf\n”,x);

     printf(“Hello World\n”) 

#include <iostream>

#include <string>

using namespace std;

double x;

string str;

输入cin>>x;

     cin>>str;

输出 cout<<fixed << setprecision(3)<<endl;

     cout<<“Hello World”<<endl;

说明:

1.如果str中要存储”Hello World”,如何做到?

 说明,%s输入遇到空格或回车就会停下。

C:

gets(str);          //stdio.h中gets函数

scanf("%[^\n]",str);  //[]中是一个正则表达式,表示读入排除回车之外的所有数据。

C++:

getline(cin,str);     //c++中没有正则表达式

2.万能头文件

#include<bits/stdc++>

   说明,这要服务器端编译环境支持,一般支持。

3.取消同步流

由于cin和cout需要自动判断变量类型等内部原因,读写效率比scanf和printf更低。当数据量较大时,可能导致程序运行超时。

我们可以通过取消同步流来加速cin和cout,加速后效率相差无几。

调用cin、cout前输入以下命令:

ios::sync_with_stdio(e), cin.tie(e),cout.tie(e);

3.string

string是C++标准库的重要组成部分,主要用于字符串处理。

使用string库需要在头文件中包括该库 #include<string>

string与char[]不同,string实现了高度的封装,可以很方便地完成各种字符串的操作,比如拼接、效取、匹配等。

1)字符串管理:string封装了字符串的存储和管理。它自动处理字符串的内存分配和释放,避免了手动管理内存的麻烦。

2)动态大小调整:string可以根据需要自动调整字符串的大小。在添加或删除字符时string会自动调整内部的存储容量,确保足够的空间来容纳字符串。

3)安全性:string提供了一些方法来确保字符串的安全性。例如,它提供了越界访问检查,以避免访问超出字符串范围的字符。

  1. 迭代器支持:string支持迭代器,可以使用迭代器遍历字符串中的字符,进行字符级别的操作。
  2. 兼容性:string是C++标准库的一部分,因此在C++中广泛使用,并且与其他标准库组件和C++语言特性兼容。

基本操作

#include <iostream>

#include <string>

using namespace std;

int main()

{

        string str1; //空值

    string str2="Hello,world!"; //初始化

    string str3=str2; //用其他字符串变量赋值

    string str4=str2.substr(0,5); //取子串,下标0开始,长度5

    const char* charArray="Hello";

        string str5(charArray); //用字符数组赋初值

    string str6(5,'A'); //用5个重复'A'赋值

   

    printf( "str = %s\n",str6.c_str());//c_str()转成字符数组

        return 0;

}

1.获取字符串长度(length/size)

int length=str6.length();

2.字符串查找(find)

size_t pos=str2.find("wor1d" );

3.拼接字符串(+或append)

string result1=str5 + "," +str6;//使用+运算符

string result2=str5.append(",").append(str6);//使用append()函数

4.字符串替换(replace)

result2.replace(6,6,"world!");

5.提取子字符串(substr)

string subStr=str2.substr(0,5); //0起始位置,5长度

6.字符串比较(compare)

int res=result1.compare(result2);

string重载了不等号,所以可以直接使用s1<s2的方式来比较string的大小,比较的规则是按照字典序大小进行比较。

res=result1<result2;

cout<<res<<endl;

7.遍历string

A.循环枚举下标

string s="Hello";

for(int i=0;i<s.length();++i)

          cout<<i;

        cout<<'\n';

B.auto枚举(其中&表示取引用类型,如果对i修改将会改变原来的值)

DEV工具菜单,修改编译选项,在"链接器命令行”加入"-std=c++11",重新进行编译,即可解决问题

for(auto i:s)

    { 

           cout<<i;

           i='a';//此处的修改无效,这个i是拷贝出来的,不是引用s的

    }

        cout<<'\n';

    for(auto &i:s)

    {

           cout<<i;

           i='a';//此处修改会改变s的字符值

    }

    cout<<'\n';

    cout<<s;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值