21天学通C++学习笔记(四):数组和字符串
1. 数组
- 概念
- 是一组元素
- 这些元素是相同的数据类型
- 按顺序存储到内存中
- 目的是避免在业务需要时去重复声明很多同类型的变量
- 初始化
- 分别初始化:int i [5] = {1,2,3,4,5};
- 全部初始化:int i [5] = {}; 或 int i [5] = {0};
- 部分初始化:int i [5] = {1,2};
- 长度参数可以也只可以用常量
- 如果知道每个元素的初始值,可以不指定数组包好的元素数,传几个就是多长:int i [] = {1,2};
- 访问和修改元素数据
- 索引从0开始访问数组元素:i[0]
- 虽然索引可以达到甚至超过数组长度,但取回的值就不确定是什么了,有安全和稳定性的风险,甚至会崩溃,所以要避免。
- 多维数组
- C++的多维数组其实只是模拟,本质还是单向的一维顺序存储
- 初始化时可以以多维的形式,也可以一维的形式:int i[2][2] = {{1,2},{3,4}}; 或 int i[2][2] = {1,2,3,4};
- 最好以循环的方式访问和操作多维数组,代码更多且不易出错
- 动态数组
- 不像静态数组那样提前预留了很多内存空间
- std::vector
- #include
- vector dynArray (3); dynArray[2] = 1; dynArray.push_back(0);
- push_back将数字插入到数组末尾,这个矢量动态地调整其长度,以存储更多数据。
- 矢量、模板
- 一定要初始化变量和数组,否则它将包含最后一次存储在相应内存单元中的值。
2. 字符串
- C风格字符串
- 是特殊的字符数组
- 以'\0'结尾,编译器会帮忙给字符串字面量结尾加上'\0','\0'是一个字符,表示空,即让编译器插入空字符或零
- 如果字符数组包含多个'\0',那么当成字符串使用时,会被截断。但数组长度没有变,sizeof的结果还是完成的长度
- 使用C风格的字符串来存储用户输入很不安全,用户可能输入比数组长度更长的字符串。
- 很危险,比如cout使用字符数组,如果忘了加'\0',会多打印垃圾字符。某些情况下甚至导致程序崩溃。strcpy、strcat、strlen也是这样
- 浪费一个字符,考虑限制长度时容易忘记考虑
- C++字符串
- 更高效、更安全
- 是动态的,容量自动增大
- #include
- .length()
- 自动初始化为默认值
- cout将不断读取字符,直到终止空字符。因此变量空间要足够。
- \可用于cout语句的换行
21天学通C++学习笔记(四):数组和字符串的更多相关文章
- 21天学通C++学习笔记(九):类和对象
1. 类和对象 现实中的人等事物往往具备一些特征并且可以做某些事情,要在程序中模拟这些事物,需要一个结构,将定义其属性(数据)以及其可用这些属性执行的操作(函数)整合在一起.这种结构就是类,而这种结构 ...
- 21天学通C++学习笔记(八):指针和引用
1. 简述 C++最大的优点之一是,既可以用它来编写不依赖于机器(主要是内存)的高级应用程序,又可以用它来编写与硬件紧密协作的应用程序. 事实上C++让您能够在字节和比特级调整应用程序的性能,而要编写 ...
- 21天学通C++学习笔记(七):函数
1. 为什么需要函数 可将应用程序的内容划分成依次调用的逻辑块,让您能够划分和组织程序的执行逻辑,有助于提高可重用性. 2. 基本概念 是子程序,可接受参数,可有返回值. 要让函数执行其任务,必须调用 ...
- 21天学通C++学习笔记(二):C++程序的组成部分
1. 预处理器编译指令 预处理器是一个在编译前运行的工具. 预处理器编译指令是向预处理器发出的命令,总是以磅字符#大头. #include让预处理器获取指定文件并将它们放在编译指令所处的位置.#inc ...
- 21天学通C++学习笔记(三):变量和常量
1. 简述 内存是一种临时存储器,也被称为随机存取存储器(RAM),所有的计算机.智能手机及其他可编程设备都包含微处理器和一定数量的内存,用地址来定位不同的存储区域,像编号一样. 硬盘可以永久的存储数 ...
- 21天学通C++学习笔记(一):入门
1. 基础概念 1.1 编程语言 旨在让人更容易得使用计算资源,充分利用电脑,不用人做一些重复劳动或持续参与. 1.2 可执行文件 是可运行的成品,应按程序员希望的那样做. 1.3 生成可执行文件的步 ...
- JS学习笔记 (四) 数组进阶
1.基本知识 1.数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中的位置称为索引,以数字表示,以0开始. 2.数组是无类型的.数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的 ...
- Objective-C 学习笔记(四) 数组
Objective-C 数组作为函数参数传递 如果想在一个函数作为参数,通过一维数组,就必须声明函数形式参数 方式一 指针作为形式参数 - (void) myFunction(int *) pa ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
随机推荐
- 安装appium需要注意的事项
参考 虫师 的博客园 :http://www.cnblogs.com/fnng/p/4560298.html 1.其中第二篇中,打开命令行用的不是windows中的cmd打开的界面,而是用node. ...
- phantomjs 安装和试用
准备学习casperjs, 发现官网上说 it’s an extremely useful companion to PhantomJS, 所以决定下把它下来试试.下载安装(win7)没什么可说的, ...
- 初学者手册-IDEA常用快捷键
一.快速创建基于某个接口的类(引入相关包) 左键选择接口名称,使用快捷键Alt+enter,然后实现该类 二.打开选中的文件所在的文件夹 点选需要打开的文件,右键菜单,点击“Show in Explo ...
- Linux学习笔记 -- 目录与文件的管理
目录结构 Linux的目录结构为树状结构,最顶级的目录为根目录 “/”. 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们. 在开始本教程前我们需要先知道什么是. 绝对路径与相对路径 绝 ...
- python's twenty-first day for me 抽象类和接口类以及多态
归一化设计: 不管是哪一个类的对象,都调用同一个函数去完成相似的功能. class Alipay: def pay(self,money): print('使用支付宝支付了%s' % money) c ...
- cs231n线性分类器作业 svm代码 softmax
CS231n之线性分类器 斯坦福CS231n项目实战(二):线性支持向量机SVM CS231n 2016 通关 第三章-SVM与Softmax cs231n:assignment1——Q3: Impl ...
- Spring AOP 中pointcut expression表达式解析及配置
Pointcut是指那些方法需要被执行”AOP”,是由”Pointcut Expression”来描述的. Pointcut可以有下列方式来定义或者通过&& || 和!的方式进行组合. ...
- leetcode12
public class Solution { public string IntToRoman(int num) { string[] M = { "", "M&quo ...
- jQuery使用toggle()方法进行显示隐藏
转自:https://www.cnblogs.com/sosoft/p/3460556.html 这是一个示例: 1 <html> 2 <head> 3 <script ...
- Elasticsearch之插件介绍及安装
ES站点插件(以网页形式展现) 1.BigDesk Plugin (作者 Lukáš Vlček) 简介:监控es状态的插件,推荐![目前不支持2.x] 2.Elasticsearch Head Pl ...