首页 > 编程语言 >C++_基础内容复习-跟着代码学

C++_基础内容复习-跟着代码学

时间:2024-03-28 18:22:58浏览次数:33  
标签:emplace 函数 代码 C++ cast 类型 const 指针 复习

二进制文件读写

 ios_base::out	以写入方式打开文件。
 ios_base::binary	以二进制模式打开文件
    std::ofstream ofs(FILE_PATH,ios_base::app);//以追加的形式打开文件
    // 写入学生数量
    int numStudents = students.size();
    ofs.write(reinterpret_cast<const char*>(&numStudents), sizeof(numStudents));
//说明
  二进制方式写文件主要利用流对象调用成员函数write 
   函数原型 :ostream &write(const char * buffer,int len);	
       函数名称前面加引用符号“&”的意思是返回引用类型。格式:类型标识符 &函数名(形参列表及类型说明){ //函数体}。
	函数参数   
	    在函数参数中:如果&在函数参数的类型声明中,那么它表示引用,这样函数可以修改传入参数的值 
	    在函数参数中:通过将指针作为函数参数的方法,既可以返回多个运算结果,又避 免了使用全局变量
        “const char * buffer”是指,字符指针buffer指向内存中一段存储空间,这是字符型常量指针,指向不可以改,指向的 内容可以改;
	     
     函数调用   
         reinterpret_cast<const char*>(&numStudents)  
         reinterpret_cast用于将指向其他类型的指针转换为const char*类型的指针,以确保正确地将二进制数据写入文件
    函数传参	 
    	1,指针传参 -> 将变量的地址直接传入函数,函数中可以对其值进行修改。
        2,引用传参 -> 将变量的引用传入函数,效果和指针相同,同样函数中可以对其值进行修改。
    变量:
         引用的声明方法:类型标识符 &引用名=目标变量名; &在此不是求地址运算,而是起标识作用	
    	 常引用声明方式:const 类型标识符 &引用名=目标变量名;
		 
	reinterpret_cast 运算符可用于在指针和不相关类型的引用之间进行转换 reinterpret:重新解释
	    reinterpret_cast 不执行任何类型检查或转换。 它只是将对象的位重新解释为不同的类型
	  dynamic_cast static_cast  const_cast
	
seekg():输入 文件指针跳转函数。表示将输入文件指针跳转到指定字节位置‘  "g" 表示 "get",
seekp():输出 文件指针跳转函数。表示将输出文件指针跳转到指定位置 p是put缩写	
	
创建一个二进制文件,
  其中包含一些标头,用于标识格式并提供元数据 
  文件的其余部分包含原始二进制值	

数据结构

 C++11新标准引入了三个新成员:
           emplace、emplace_back、emplace_front,
   分别对应 insert、push_back    、push_front
  调用emplace时,则是将参数传递给元素类型的构造函数,emplace成员使用这些参数在容器管理的内存空间中直接构造元素,没有拷贝的操作 
   
unorder_map
 成员函数
     1. 迭代器
     begin   返回指向容器起始位置的迭代器(iterator)
     end     返回指向容器末尾位置的迭代器
     cbegin   返回指向容器起始位置的常迭代器(const_iterator)
     cend    返回指向容器末尾位置的常迭代器
 元素的键值分别是迭代器的first和second属性。
 c++ 里面的map容器的迭代器里面 有个first 和 second,分别指向键值和数值
   使用(*it).first或者it->first 获取
    it->first  代表键;
    it->second 代表值
	
    std::map<int, std::string> myMap = {{1, "one"}, {2, "two"}, {3, "three"}};
    for (const auto& pair : myMap) {
       std::cout << pair.first << " => " << pair.second << '\n';
     }	
	for (auto [key, val] : myMap) {
      cout << key  << " " << val << endl;
    }
	
vector 
   c++遍历vector的四种方式
        可以使用迭代器,
		可以使用auto,
		可以使用for_each,
		可以使用下标。 v1[i] 
    迭代器( iterator)	 很多容器没有下标,但是所有容器都有迭代器
	 it->first代表下标;it->second 代表值
	emplace() 每次只能插入一个元素,而不是多个 
	  emplace函数不像emplace_back那样自动处理内存分配问题,所以在使用emplace时,如果vector的大小超过其容量,它将需要重新分配
	  
struct
  结构体   
   结构体变量的首地址:
    1.结构体变量的地址就是结构体的首地址
    2.结构体第一个成员的地址就是结构体的首地址	
访问结构体中的成员,用 .符号
使用指针访问结构体中的成员:使用 操作符-> 来访问结构体

函数

  sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,
    前者打印到字符串中,后者则直接在命令行上输出
    sprintf 是个变参函数,定义如下:

   int sprintf( char *buffer, const char *format [, argument] ... );
//把整数123 打印成一个字符串保存在s 中。
sprintf(s, "%d", 123); //产生"123"

操作系统相关

  short [int] 内存大小 2byte=16bit
  数据范围 -32768~32767(即-2^15~2^15-1)
  
  unsigned short [int]内存大小 2byte=16bit
  数据范围 0~65535(即0~2^16-1)

关键字

  auto 不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,
    auto定义的变量的类型由变量定义和初始化语句等号的右边的值的类型决定,
	auto声明的变量必须由编译器在编译时期推导而得

C++断点调试

 vscode --设置断点	

标签:emplace,函数,代码,C++,cast,类型,const,指针,复习
From: https://www.cnblogs.com/ytwang/p/18102342

相关文章

  • 代码随想录学习Day 20
    669.修剪二叉搜索树题目链接讲解链接思路:采用递归方法,若root.val>high,判断左子树是否为空,若不空,递归遍历左子树,若空就返回null;若root.val<low,则判断右子树是否为空,若不空就递归遍历右子树,若空就返回null;如果low<=root.val<=high,就递归遍历左右子树,最后返回根节点即......
  • husky配置实现代码提交前校验与规范提交信息
    husky是一个GitHook管理工具,主要用于实现提交前eslint校验和commit信息的规范校验。Husky的原理是让我们在项目根目录中写一个配置文件,然后在安装Husky的时候把配置文件和GitHook关联起来,这样我们就能在团队中使用GitHook了。首先,确保已经安装了husky和commitlint......
  • PHP代码审计(三)——方法技巧
    前期准备源码,环境网站目录结构主目录模块目录插件目录上传目录模板目录数据目录配置目录配置文件:一般类似config.php等文件。保存一些数据库相关信息、程序的一些信息。先看看数据库编码,如果是gbk则可能存在宽字节注入。如果变量的值用双引号、则可能存在双引号解析代......
  • PHP代码审计(二)常见漏洞篇
    注入类命令注入将用户输入拼接到命令行中执行导致的任意命令执行问题<?php$command='ping-c1'.$_GET['ip'];system($command);//system函数特性执行结果会自动打印?>此处输入ip参数无任何过滤限制get输入ip=127.127.127.127如果是非法输入:ip=127.127.127.127;......
  • 代码随想录Day17 ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和
     110.平衡二叉树 classSolution{public://返回以该节点为根节点的二叉树的高度,如果不是平衡二叉树了则返回-1intgetHeight(TreeNode*node){if(node==NULL){return0;}intleftHeight=getHeight(node->left......
  • 低代码与数字化转型:重塑企业技术生态的新引擎
    随着科技的飞速发展,数字化转型已成为企业发展的重要驱动力。在这一进程中,低代码平台正逐渐崭露头角,以其高效、灵活的特性,助力企业加速数字化转型的步伐。本文将从低代码平台的概念、优势、应用及前景等方面进行探讨,以揭示低代码在数字化转型中的重要作用。低代码平台的概念......
  • 如何使用Java代码混淆技术保护您的应用程序
     摘要本文探讨了代码混淆在保护Java代码安全性和知识产权方面的重要意义。通过混淆技术,可以有效防止代码被反编译、逆向工程或恶意篡改,提高代码的安全性。常见的Java代码混淆工具如IPAGuard、Allatori、DashO、ZelixKlassMaster和yGuard等,为开发者提供了丰富的选择。本文将介......
  • R语言中的Nelson-Siegel模型在汇率预测的应用|附代码数据
    原文链接:http://tecdat.cn/?p=11680这篇文章的目的是指导读者逐步使用R编程语言实现Nelson-Siegel模型的步骤。您可能已经知道,估计利率期限结构是任何资产定价的关键,因此对投资者和政策制定者起着重要的作用 ( 点击文末“阅读原文”获取完整代码数据 )。想法是使一条连续曲线适......
  • 学生代码2
    CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`age`tinyint(3)u......
  • C++第五十七篇——RPC进程间通信
    第一步:新建一个空项目 第二步:新建一个IDL 第三步:生成一个GUID,编写RPCConn.idl RPCConn.idlimport"oaidl.idl";import"ocidl.idl";[uuid(1BA624D4-DC7D-484C-AF8C-0EF86C4A0555),version(1.0)]interfaceRPCConn{intAdd([in]inta,......