《C++ Primer 第五版》(第2.5节,第3.1-3.4节) ——采用预处理功能编写头文件,string初始化和字符操作,vector初始化和迭代器

1.采用预处理功能编写头文件

         在头文件定义(头文件中的内容是只能被定义一次的实体)过程中,为了防止头文件重复包含的情况,采用预处理器的一个头文件保护符功能,格式为:{  #ifndef 预处理变量(通常大写)         #define  预处理变量     #endif },多使用预处理的功能可以增强代码的鲁棒性和移植能力,但是增加了代码的理解能力。

         预处理变量无视C++语言中的作用域规则,它是在程序预处理阶段将程序中的所有预处理变量用实际的变量来进行替代。另外如果使用上述格式的预处理功能定义了预处理变量,则后面的程序中如果遇到预处理变量,则可以避免重复定义。

2.string初始化和字符操作

          string是C++语言中定义的一种复杂数据类型(可变长字符串),它的初始化方式可以分为两种,一种是利用“=”操作的拷贝初始化,另外一种是利用构造函数完成直接初始化。

          拷贝初始化方式:string s2=s1;  string s3="value"(拷贝字符串除最后一个字符的所有字符给字符串s3);’

          直接初始化:string s4(s2),  string s5("value"),  string s6(n,'c');

          string提供一个size函数,返回string对象的大小,它的数据类型为一个string::size_type,为一个用typedef定义的变量。

          标准库允许将string对象和string对象或string对象和字面值常量进行运算(字面值常量可以转换为string对象),但是不允许加号两边都是字面值常量。

          C++11提供一种范围for语句来对string对象中的每一个字符才做,结合cctype(兼容C中的ctype.h文件,C++继承C中的文件只是将C中的头文件删去.h后缀,同时在前面添加一个c)中的字符处理和判断函数,就能完成对string对象中的字符处理。使用for循环修改string对象,需要定义字符引用。cctype中的处理字符的函数:

          isalnum(c):c是字母或者数字为真;                                 islower(c):c为小写为真;

          isalpha(c):c是字母为真;                                                isupper(c):c为大写为真;

          isdigit(c):c是数字为真;                                                  tolower(c):c为大写时转小写,否则不变;                                  

          ispunct(c):c是标点符号为真;                                         toupper(c):c为小写时转大写,否则不变;

          isspace(c):c是空格为真;

          string支持[ ]操作符,可以使用[ ]访问string中的任意字符,但是必须保证其中的数值在0~string.size()之间,否则会产生数据越界的现象。

3.vector初始化和迭代器

          vector是C++语言定义的一个类模板,而不是一种类型,是一个可变长的向量。vector的初始化方式有三种:拷贝初始化,直接初始化和初始化列表的方式。拷贝初始化通常与赋值与赋值运算符“=”有关,如vector<int> v2=v1,直接初始化是采用初始化函数,如vector<int> v3(n,val);vector<int> v4(v3);vector<int> v5(n),初始化列表是采用花括号的方式,如vector<int> v6{1,3,5}或vector<int> v7={1,3,5};

          如果vector的初始化中只提供容器中元素的数量,不提供初始值,则容器中的初始值会执行默认的初始化。如果没有默认的初始化值,则容器创建失败。如果在使用花括号列表初始化容器时,但是花括号中的值不能用来列表初始化,则考虑用这样的值来构造vector对象,如vector<string> v8{10,"hi"}(v8中有10个“hi”的字符串)

          vector中定义了一个size函数来定义容器中元素的个数,数据类型为vector<int>::size_type.vector可以使用下标来访问已存在的对象,但不能利用下标来添加对象(可以采用范围for语句来确定下标是否合法)。

          vector中定义了一种begin和end两种迭代器,迭代器的类型为vector<int>::iterator.C++11中增加了两个迭代器cbegin和cend,对应的迭代器类型为vector<int>::const_iterator.

          对于vector中定义的迭代器,如果期间vector中的值发生增加或者减少,则所定义的迭代失效。vector和string支持迭代器加减运算,迭代器加减一个整形得到的仍为一个迭代器(注意不能越界,begin,end),两个迭代器相减,得到一个名字为difference_type的有符号整形。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《C++ Primer 第五版》(第3.5-3.6节) ——C++中的内置数组类型,string对象和C风格字符串

1.C中的内置数组类型 C中的数组是内置数据类型&#xff0c;但不是基础数据类型而是构造数据类型&#xff0c;是有限个相同数据、占据着连续物理存储空间的有序集合。而内置数据类型定义的下标运算符可以处理负值运算(只要在数组范围之内)&#xff0c;这和vector及string的下标运…

793. 阶乘函数后K个零 golang

Me(AC 33 / 44 个通过测试用例) func preimageSizeFZF(K int) int {count : 0for i : 0; i < 1000000; i {if trailingZeroes(i) K {count}}fmt.Println(count)//fmt.Println(trailingZeroes(25))return count}func trailingZeroes(n int) int {if n 0 {return 0}return …

小程序radio单选框回显

话不多说&#xff0c;效果图如下&#xff1a; 具体代码如下&#xff1a; <radio-group name"radio" bindchange"getSex"><label><radio value"1" checked"{{xingbie1}}" />男</label><label><radio…

172. 阶乘后的零 golang

官解 一般很难想到这个方向&#xff0c;有点类似数学归纳法&#xff1f; func trailingZeroes(n int) int {if n 0 {return 0}return trailingZeroes(n / 5) n / 5 }

《C++ Primer 第五版》(第4.11节类型转换) ————关于无符号数和有符号数的运算探究

1.关于无符号数和有符号数的运算 关于无符号数和有符号数的运算&#xff0c;在我看来一直是觉得只要有无符号数和有符号数的运算&#xff0c;有符号数就转化为无符号数&#xff0c;但是在《C Primer 第五版》的p142介绍&#xff0c;关于无符号数和有符号数的运算如下规定的&…

《C++ Primer 第五版》(第4.1-4.11节) ——运算符的执行顺序问题,负值坐商取余问题,数值的移位操作

1.运算符的执行顺序问题 在C语言中&#xff0c;没有明确规定大多数二元运算符的求值顺序&#xff0c;这给编译器留下了余地&#xff0c;这种策略是在代码生成效率和程序潜在缺陷之间的权衡。 对于运算符而言&#xff0c;如果运算符的两个对象中&#xff0c;存在表达式指向并修改…

543. 二叉树的直径 golang

文章目录543. 二叉树的直径example正确解法question代码&#xff08;wrong)543. 二叉树的直径 概要: 借鉴了这个题的代码。可是有一个测试用例过不去 https://blog.csdn.net/csdn_kou/article/details/104122067 example 给定一棵二叉树&#xff0c;你需要计算它的直径长度。一…

《C++ Primer 第五版》(第4.11-4.12节)——static_cast,const_cast和reinterpret_cast类型转换, 运算符优先级表

1.static_cast,const_cast和reinterpret_cast类型转换 static_cast:强制的类型转换(不能用于底层的const转换),以前C语言中的强制类型转换都可以使用static_cast来完成。如&#xff1a;int i3; double jstatic_cast<double>(i); const_cast&#xff1a;改变底层const(指针…

《C++ Primer 第五版》(第5.1-5.6节) ——异常处理机制(try语句块,throw表达式和catch异常捕捉处理单元)

1. 异常处理机制 C中使用try,throw和catch三个关键字来实现异常的触发、抛出和处理的功能&#xff0c;具体通用语法形式如下&#xff1a; try{ if(true) normal program-statements&#xff1b;//没有触发异常时候执行的代码 if(false) throw(exception); //出现错误&am…

《C++ Primer 第五版》(第6.1~6.3节) 函数形参和实参传递,可变参数列表和函数返回值

1.函数形参和实参传递问题 函数参数传递有两种&#xff1a;值传递(变量&#xff0c;指针&#xff09;,引用传递(使用别名&#xff09;。 在形参和实参的传递过程中&#xff0c;牵涉到大的类类型对象、容器类型对象或者不支持拷贝操作的对象时&#xff0c;不适合采用值传递&…

461. 汉明距离 golang

Me 异或取出1的个数求取异或后1的个数返回 func hammingDistance(x int, y int) int {x x ^ yvar count 0for x ! 0 {x x & (x - 1)count}return count }

《C++ Primer 第五版》(第6.3~6.7节)——返回指向数组/函数的指针,函数重载,默认形参、inline函数和constexpr函数

1.返回指向数组/函数的指针 顾名思义&#xff0c;就是函数返回值为指向数组/函数的指针。 数组的性质&#xff1a;不能被拷贝&#xff0c;函数也不能返回数组。但可以返回数组指针/引用&#xff0c;声明一个返回数组指针的函数&#xff0c;有四种方式&#xff0c;一种是直接声明…

136. 只出现一次的数字 golang

Me 1. 先排序就好做了 执行用时 :16 ms, 在所有 Go 提交中击败了27.90%的用户 内存消耗 :4.7 MB, 在所有 Go 提交中击败了100.00%的用户func singleNumber(nums []int) int {sort.Ints(nums)for i:0; i < len(nums); i {if i len(nums) - 1 {return nums[i]}if nums[i] …

《C++ Primer 第五版》(第1~6章总结)

1.C采用标准库文件iostream定义的两个对象来实现IO机制。 2.代码注释应解释关键数据的变量含义和代码完成了什么功能&#xff0c;力求简洁易懂。 3.正确理解初始化和赋值&#xff0c;声明和定义的含义&#xff1f;初始化是在定义对象的时候同时赋值&#xff0c;赋值是定义对象…

268. 缺失数字 golang

Me 首项加末项乘以项数/2.就是总和。然后剪掉nums里面的数组和 func missingNumber(nums []int) int {var sum intlens : len(nums)for _, value : range nums {sum value}return ((1 lens) * lens) / 2 - sum }

使用touch更新文件的时间

#&#xff01;/bin/bashfunction read_dir() {for file in ls $1doif[-d $1"/"$file]thenread_dir $1"/"$fileelseecho $1"/"$filetouch $1"/"$filefidone }read_dir ./

231. 2的幂 golang

Me func isPowerOfTwo(n int) bool {return n > 0 && (n & (n-1)) 0 }

linux/windows上STM32固件烧写工具的开发demo

1.主要实现功能&#xff1a;完成对HEX和DFU文件的烧写&#xff0c;显示烧写的进度等功能 2.开发工具:Qt creator4.9.0 3.开发系统平台&#xff1a;windows系统和linux系统两套平台 4.具体开发步骤&#xff1a; 1&#xff09;设计整体的界面&#xff0c;包括文件选择界面(dfu和h…

338. 比特位计数 golang

Me func countBits(num int) []int {result : make([]int, num1)for i:0; i<num; i {result[i] numberOne(i)}return result }func numberOne(x int) int {if x 0 {return 0}var count intfor x ! 0 {x x & (x - 1)count}return count }

Qt使用qss文件管理stylesheet

内容总结简介&#xff1a; 1&#xff09;使用.qss后缀的文件来管理Qt中每个类的具体组件的stylesheet设置。 2&#xff09;在类中使用具体.qss文件中的设置。 3&#xff09;解决控件中多个相同组件不同设置或者同一个控制不同子控制或者伪状态的问题。 1.新建后缀名为.qss的文…