C++语法

这篇博客详细介绍了C++编程的基础知识,包括命名空间、数据类型、输入输出、类型转换以及C++中的字符串处理。接着深入讲解了C++中的类、数组容器、队列容器、栈容器、双端队列容器、动态维护有序序列容器(如set和multiset)、映射容器(如map)、位容器(bitset)以及pair的用法。此外,还涉及了位运算、算法库中的排序、打乱序列等功能。
摘要由CSDN通过智能技术生成

#include // string
#include // printf() scanf()
#include
#include //strlen()
#include
#include //stringstream ssin(s); 读入字符串流
#include
#include
#include
#include
#include
#include
#include
using namespace std;

第一章 基础知识

使用std命名空间,防止命名冲突
若不声明此句,则使用时需 std::cin>> std::cout<<
不同命名空间命名可以相同,同一命名空间命名不可相同!

c++内有bool类型,true(非0) false(0)
int -2147483648~2147483647 %d
float 有效数字6~7位 %f
double 有效数字 15~16位 %lf
long long a=10000000000; N
long long a=10000000000ll; Y 常数也有默认类型 int

重要!
输入 cin>>,scanf()不读空格
cin,cout比scanf(),printf()效率更低
c++中取模结果符号与第一个数符号一致

类型转换
显式:
float x=1.2345;
int y=(int)x;
y=1,x值不变
隐式:
不同类型变量做运算时,结果默认转换成高精度类型
cout<<‘A’+2; 67
cout<<(char)(‘A’+2); C

ASCII码 ‘0’ : 0H30 (48)
‘A’ : 65 ; +32-> ‘a’ : 97 ;

闰年: if(y%40&&y%100!=0||y%4000)

立方和 == 和平方

斐波那契数字
f(0) = 0; f(1) = 1;
f(n) = f(n-1) + f(n-2); (n>=2)

曼哈顿距离
|x1-x2| + |y1-y2|

int n;
cin>>n;
int cx=n/2,cy=n/2;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(abs(i-cx) +abs(j-cy)<=n/2)
cout<<‘*’;
else cout<<’ ';
}
cout<<endl;
}

求因数的一个优化!
若 m%i==0; 则 m%(m/i)==0;
for(i=2;i<sqrt(m);i++)

c++每秒运算不超过1亿次;c++默认栈空间 1MB ;

申请栈空间时会立即分配(无初始化);申请堆空间时会使用一些分配一些(自动初始化);

重要!
判断两浮点数大小;
const float eps=1e-6;
if(abs(a-b)<eps) cout<<“=”<<endl;
else if(a<b-eps) cout<<“a<b”<<endl;
else cout<<“a>b”<<endl;

利用数组实现大数运算(大数*2)
A[0] 存个位
int t=0;
for(int i=0;i<n;i++)
{
t+=A[i]*2;
A[i]=t%10;
t/=10; // 进位
}

#include
const int N=100;
int a[N];

memset(a,0,sizeof a); 起始位置,值,多少个; 所有位置为 0
memset(a,-1,sizeof a); 所有位置为 1

int b[N];

memset(b,a,sizeof a); 复制数组a到数组b中

gets() 不安全已经被新版本c++淘汰,不可再使用!

char c[100]
scanf(“%s”,c); 不会读入空格
fgets(c,size,stdin); 读入指定大小(size-1 个)字符串,会读入空格!

string s;
cin>>s; 遇到空格停止读入
getline(cin,s); 会读入空格 (常用)

scanf()无法读入string类型 会报错
若使用fgets()读取string类型 不会在意size 直接读取遇到空格结束,不会读入空格 作用同 cin

char c[100];
puts©,printf(“%s”,c); 只能输出字符串数组,puts()自带换行,均不可输出string

第二章 string 类型及用法

#include
string s1,s2;
getline(cin,s1); 读入
s2=s1; 赋值
s2+=s1; 连接
s2+=‘A’; 连接

string s3 = ‘A’; 错误 s3是字符串,不能赋值为 字符
string s3 = “A” ; 正确

string s4(10,‘c’); 一种初始化字符串方法,s4=“cccccccccc” ;

cout<<s<<endl; 输出,puts(s),printf(“%s”,s)均不可!

string s;
s.empty()
s.size()

string s1,s2;
比较: if(s1>s2) > >= < <= == !=
相加: s1+=s2;
赋值: s2=s1;

string可加字符或字符串 ,字符或字符串之间不可相加

s2+=s1+“is great” +‘!’; 正确,因为s1+ “is great” 结果是string仍然可以和 ‘!‘相加 :隐式类型转换
s2+=“is great” +’!’; 错误,因为 “is great” 和 ‘!’ 不可以相加

遍历string
string s;
for(auto c:s) <-> for(char i=0;i<s.size();i++) s[i]
(只是遍历s的值) (可以操作s的值)
for(auto &c:s) 引用,可以改变s的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值