c++基础 易道云笔记

c++基础语法

编程快捷操作使用方法

反汇编: 先设置一个断点,调试后,在调试菜单中选择窗口,选择反汇编
**单词替换:**先按下ctrl+f查找,再替换

基础知识辨析

1.数组指针 int (*ptest)[5] {} //该指针可以处理每行有5个元素的数组;
2.指针数组 int* ptestA[5] //包含5个指针的数组

3.动态分配内存中

如果需要分配内存,在c中有以下几种
1.void* malloc(n*sizeof(int))
eg:int* p = (int*)malloc(10*sizeof(int));

2.void* calloc(x*sizeof(int))1的区别就是会将分配的内存单元全部设为0

3.void* realloc(void*,int),适用于重新分配内存,重新分配后的内存数据不丢失,但是地址变化
eg:int* pa = (int*)malloc(4);
		pa=(int*)realloc(pa,8);

4.void free(void* Block) 释放内存
	free(pa);p = 0;

5.c++内存动态分配
	int* p, * pm;
	p = new int;
	p[100] = 50;
	pm = new int[x];

	delete p;
	delete[] pm;
	
6.复制内存

void* memcpy(void* 要复制的对象,void* 复制到哪儿,int size字节);
void* memset(void* Des,int val,size_t Size)
eg:memset(p, 0,100*sizeof(int));

4.引用

int a =10;
int b=10;
int& pa = a; /注意引用指向是不可以换变量的,只能指向a
pa = b ;/该操作是让a=b;

5.堆和栈: 堆是空闲内存,栈是程序在编译的时候就已经确定了大小的一段内存区域,效率要高于堆,但是容量有限

6.智能指针: std::unique_ptr是智能指针的一种,目的是为了解决原生指针安全性不足的弊端
智能指针只能指向一个内存空间,不可重复指向
声明语法:std::unique_ptr<类型> 变量名称{}
c++14以后,eg

std::unique_ptr<int[]> 变量名称 {std::make_unique<int[]> (5)} 该变量数组有5个值;
std::unique_ptr<int> 变量名称 {std::make_unique<int> (5)} /对该指针指向的值赋值为5

智能指针的方法:
reset()指令,会释放std::unique_ptr的内存空间,并且将std::unique_ptr设置为nullptr;

get(),将会返回std::unique_ptr的指针,返回的是原始(非智能)指针

release(); 将会返回std::unique_ptr的指针并且将std::unique_ptr设置为nullptr。

std::move()用于转移指针变量
eg:

std::unique_ptr<int> ptrA = std::make_unique<int>(150);
std::unique_ptr<int> ptrB;
ptrB = std::move(ptrA)/将ptrA转移到ptrB,此后ptrA会指向0

7.共享智能指针: std::shared_ptr<int> ptrA{}可以有多个std::shared_ptr指向同一地址,当最后一个指针释放后,才会释放其所占有的内存空间
生成方法,c++14后同上

std::shared_ptr<int> 变量名称 {std::make_shared<int> (5)} /对该指针指向的值赋值为5
/注意std::make_shared不支持数组,如果要用数组按下方式使用
std::shared_ptr<int[]> ptrC = new int[5]{1,2,3,4,5}

拥有方法:

long std::shared_ptr.use_count(); / 返回当前指针共有多少个对象调用

bool std::shared_ptr.unique();/返回当前是否只有一个智能指针指向该数据

bool std::shared_ptr.reset() / 将当前置nullptr,如果是最后一个,则释放内存

8.字符串
常量字符串是const char*类型
如果要在控制台输出中文字符–即 Unicode32,需要做本地化操作

#include<locale>
setlocale(LC_ALL, "chs");

9.指针和结构体
有以下代码,我们注意到如果是结构体的指针,是需要->来指向其中的元素的,只有实体才可以用.来访问

typedef struct Role {
	int Hp;
	int Mp;
}*PRole;


int main() {
	Role user;
	PRole puser = &user;

	puser->Hp = 50;//指针偏移形式
	user.Hp = 500;

}

编译器并不知道一个结构有多大,所以用指针的的时候,编译器只有通过该指针指向的元素离指针起始点的距离来确定该结构体元素,从下列汇编语言能看出一二
在这里插入图片描述

10.联合体 共享成员变量的内存

11.std::string字符串

初始化方法:
①直接用字符串初始化
②std::string 变量名称 {“字符串”, 要截取的长度};
③std::string 变量名称{“字符串”, 起始位置,要截取的长度};
④std::string 变量名称 {要复制的个数, ‘字符’};

string连接字符串
str = “hyd123”+str1;
eg:string str2 = string{"abc"}+ "1234"

string连接字符
str = str1+‘a’;
基本方法:

1.转化为字符串
std::string std::to_string(数字)

2.字符串拼接
str1 = str.append(“456”);
str1 = str.append(“456”,1);截取第一个拼接
还有一些append方法和初始化方法相同

3.截取
str1.strsub(1),从1号位置开始往后都截取
str1.strsub(1,3),/从1号位置开始,截取3个位置

4.获取长度
int length = str1.length();

5.字符串的比较除了用> = <外,还有compare,返回int类型
compare类型
在这里插入图片描述

6.搜索:如果要找到子串的起始位置信息,需要用到find函数
在这里插入图片描述
在这里插入图片描述

7.字符串的插入操作,可以在指定位置插入字符串
在这里插入图片描述
8.字符串的替换操作,可以替换某个字串
在这里插入图片描述
在这里插入图片描述
9.对字符串删除子串的操作

10.字符串与数字的转化
在这里插入图片描述

指针与字符串的关系
字符串string 类型是从第四个字节开始存放字符串的,有以下方法
在这里插入图片描述

stringstream: string类型可以类似std::cout创造一个流,更方便处理字符串,
在这里插入图片描述

12.函数

在此先声明,对于过于基础的知识就不总结了,总结易错的点
函数的传参
对于多维数组的传参,需要这样传
在这里插入图片描述
对于引用的传参,和指针类似,但是需要注意不可传入空引用,必须初始化,用引用传参的目的是方便修改内存中的值,引用可以认为是弱鸡版的指针,引用可以帮助我们返回多个值。
在这里插入图片描述
在这里插入图片描述

有另外一种形式,如下图中的
在这里插入图片描述
可以通过typedef结构体指针来理解
在这里插入图片描述
c++中如果要传输默认实参,需要放到形参的最后

函数的不定参数
对于函数的不定参数的信息,后续补充

左值右值
右值:表达的是一个对象的值,无法赋值的值,例如 320+230
左值:表达的是一个对象的身份,可以进行赋值的值,或者说变量
一般的引用&是左值引用,如果要对右值进行引用,则用&&,右值引用一般是用于即将销毁的数据

函数模板

概念:用来生成函数,帮助函数重载自动生成返回值

用法: 例如,对于求平均数的函数

template <typename type1> type1 ave(type1 a,type1 b)
{
	return (a+b)/2
}

该模板可以自动返回需要的值类型

int a = ave(1,2); // ave相当于 int ave(int a,int b)

下面给出一个完整的示例

#include<iostream>

template <typename type1>
type1 ave(type1 a, type1 b, type1 c) {
	return (a + b + c) / 3;
}

int main() {
	std::cout << ave(12.0f, 233.2f, 35.3f);
	std::cout << ave(11, 33, 55);
	return 0;
}

type1可以作为任何类型,数组、带指针、引用都可以,或者可以用type1* \ type1&,两种方式都可以

但是如果用type1表示指针类型会出现一个问题,就是传入的是地址,无法完成想要的结果,这时候,万一编程人员使用了指针传入,需要做一个例外处理
如下:

template<>
int* ave(int* a, int* b, int* c) {
	return (*a + *b + *c) / 3;
}

记住:函数重载优先级大于函数模板

除了让编译器自动匹配,我们还可以指定函数模板的参数
比如调用ave时,使用ave<int>(192.0f,34.7f) 相当于执行 int ave(int a,int b);

对于多个不同参数的模板
在这里插入图片描述
函数模板也可以用于非类型的变量
在这里插入图片描述
如果在模板函数中需要用到数组,传递数组个数
在这里插入图片描述
它厉害的地方在于这里可以自己推断出数组的个数,并赋值到count

常量引用是“对const的引用”的简称,它是一种特殊的引用类型,主要用于修饰变量。常量引用所指向的对象不能被修改,即它把所指向的对象看作是常量(不一定是常量),因此不可以通过该引用来修改它所指向的对象的值。以上内容仅供参考,如需更多信息,建议查阅相关文献或咨询专业编程人员。

auto关键字:
①auto声明一个变量时,不会保留常量属性(const)。
②auto会优先推断为值类型而不是引用类型
③auto可以做函数的返回类型

函数声明和定义: 声明必须在前面(不占用内存),定义可以在后面(要分配内存),我们可以将函数的声明放在头文件里,函数的声明可以放在(其他)源文件
在这里插入图片描述
头文件中:#pragma once表示在单个源文件中不论调用几次,都只是调用一次,当不同头文件互相嵌套的时候不会发生错误,当编译器不支持这个语法的时候,也可以用以下代码代替

#ifndef _HEMATH_    
#define _HEMATH_
头文件内容
#endif           //如果已经定义了,就不会执行

extern关键字: 除了用于声明,还可以用于加入C声明C语言风格的函数(不支持重载)
在这里插入图片描述

static关键字: 修饰的静态变量,在不同的源文件里都是独立存在的。

<think>好的,用户需要推荐一个低代码开发平台,要求界面友好无广告、易上手,并且各部门成本可视化。首先,我需要回顾之前的对话历史,看看用户之前询问过哪些相关内容。之前用户问的是关于成熟的OA管理系统,特别是以管理和成本控制为核心的,现在转向低代码平台,可能用户希望自己定制解决方案,满足特定需求,尤其是成本可视化方面。 接下来,我需要分析用户的具体需求。用户提到的三个主要点:低代码、界面友好无广告、易上手,以及各部门成本可视化。低代码平台有很多,但需要筛选出符合这些条件的。同时,用户可能属于中小企业,因为之前提到过不同规模企业的成本区间,可能用户需要性价比高的方案,同时不希望有广告干扰使用体验。 首先,考虑界面友好和易上手。低代码平台通常强调可视化操作,但有些可能界面复杂或广告多。需要排除那些有广告或者学习曲线陡峭的平台。例如,OutSystems虽然强大,但可能对新手不太友好,且可能有较高的成本。而像宜搭、简道云这类国内平台,可能更符合中文用户的需求,界面也更简洁。 其次,成本可视化功能。平台需要支持数据可视化,能够集成各部门的成本数据,并生成仪表盘。可能需要预置模板或容易定制的报表功能。例如,简道云有丰富的模板,可以直接使用或调整,而轻流也有数据分析模块,适合生成图表。 然后,考虑无广告。很多免费或低价的平台可能会有广告,但企业级解决方案通常不会有。需要确认推荐的平台是否有广告问题。例如,钉钉宜搭作为阿里旗下产品,可能在企业版中不会有广告,而免费版可能有功能限制。 另外,用户可能没有明确说出来的需求,比如数据安全、集成能力、移动端支持等。尤其是成本数据可能敏感,需要平台有良好的安全措施。同时,能否与现有的财务系统或ERP集成,也是需要考虑的因素。 然后,需要列举几个候选平台,逐一评估是否符合条件。候选可能包括:钉钉宜搭、简道云、轻流、明道云、Power Apps等。需要比较它们的界面友好程度、广告情况、上手难度、成本可视化功能。 例如,钉钉宜搭界面简洁,适合国内用户,无广告,但可能需要结合钉钉使用,适合已经在用钉钉的企业。简道云提供大量模板,特别是财务和成本管理方面,且支持自定义报表,适合快速搭建。轻流以流程管理见长,但也有数据分析模块,适合需要流程和成本结合的场景。明道云同样强调易用性,支持多维分析,适合部门成本可视化。Power Apps功能强大,但可能需要一定的学习成本,且界面可能不如国内平台友好。 还需要考虑价格因素,用户可能希望成本可控。比如,宜搭和简道云有免费版或低价版本,适合中小型企业,而Power Apps可能成本较高。 最后,需要综合这些因素,推荐最符合用户需求的平台,并给出实施建议,比如如何导入数据、设置权限、培训用户等,确保用户能够顺利使用。同时,提醒用户注意数据迁移和移动端支持,这些可能是实际使用中的关键点。</think>### **低代码平台推荐:简道云(适合成本可视化与易用性需求)** --- #### **一、选型核心依据** 1. **零广告干扰**:企业级SaaS服务,界面纯净无弹窗 2. **学习成本低**:拖拽式操作,80%功能可通过模板直接使用 3. **成本可视化**:内置20+财务分析模板,支持部门级费用穿透查询 4. **性价比突出**:年费3万元起(适合300人以下企业) --- ### **二、核心功能演示** #### **1. 部门成本看板(示例)** $$ \text{部门成本占比} = \frac{\text{部门实际支出}}{\text{全公司总支出}} \times 100\% $$ - **可视化效果**: - 自动生成树状图/瀑布图,显示各部门费用结构 - 支持点击钻取到具体报销单据 #### **2. 成本控制流程** ``` 提交申请 → 自动校验预算公式 → 超限时触发预警 → 多级审批 → 同步财务系统 ``` - **校验逻辑**:$$ \text{可用预算} = \text{年度预算} - \text{已发生费用} - \text{在途审批金额} $$ #### **3. 预置模板示例** | 模板名称 | 包含功能 | |------------------|---------------------------------| | 差旅费分析 | 人均出行成本排名、超标记录自动标记 | | 采购比价看板 | 供应商报价对比(含历史价格趋势曲线)| | 人力成本分摊 | 按项目/部门分配薪资与社保金额 | --- ### **三、操作简易性说明** 1. **表单搭建**: - 拖拽字段生成报销单(含自动计算字段:$$ \text{含税金额} = \text{价税合计} \times 1.13 $$) 2. **流程设计**: - 图形化配置审批路径(支持按金额阈值自动分流) 3. **报表配置**: - 选择维度(部门/项目/时间)→ 选择图表类型 → 一键发布看板 --- ### **四、同类型平台对比** | 平台名称 | 学习难度 | 成本可视化能力 | 典型报价(年) | |------------|----------|----------------|----------------| | **简道云** | ⭐⭐ | 支持OLAP分析 | 3-8万元 | | 钉钉宜搭 | ⭐⭐⭐ | 基础图表 | 1.5-5万元 | | 轻流 | ⭐⭐ | 需定制开发 | 5-15万元 | | 明道云 | ⭐⭐⭐ | 多维分析 | 4-10万元 | --- ### **五、实施建议** 1. **数据准备阶段**: - 统一部门编码(如:销售部→XS-001) - 梳理费用科目树(至少细化到三级:**办公费→耗材→打印纸**) 2. **系统配置要点**: - 开启「预算强控」模式(超预算单据自动打回) - 设置数据权限(如:部门经理只能查看本部门数据) 3. **推广技巧**: - 制作3分钟操作视频(重点演示移动端提交报销) - 设置「流程优化奖」(员工提出改进建议可获得积分) --- **💡 注意事项**: - 优先使用「模板市场」的现成解决方案(节省70%搭建时间) - 要求实施顾问配置「成本异常预警规则」(如:单张发票金额超过历史平均值的200%) - 测试期重点关注移动端适配性(确保苹果/安卓都能正常显示图表) 如需测试账号或完整功能清单,可访问官网申请免费试用(通常当天开通)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赤狐先生

如果有一点点帮助,可以给点支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值