C++基础:第四章 数组、vector和字符串
文章目录
- 第4章 数组、vector和字符串
- 第1节 数组
- 注意事项
- 数组的复杂声明
- 数组中元素的访问
- 数组到指针的隐式转换
- 获得s指向数组开头和结尾的指针
- 数组的其他操作
- C字符串
- 多维数组
- 第2节 vector
- 构造和初始化
- 元素的索引和遍历
- 迭代器iterator
- vector相关其他内容
- 第3节 string
第4章 数组、vector和字符串
第1节 数组
将一个到多个相同类型的对象串联到一起,所组成的类型
int a ; int b[10];
区分类型,b
的类型为int[10]
- 初始化方式
- 缺省初始化
int a[3] = {1,2}; //第三个元素为0
int b[] = {1,2,3} //int[3]
注意事项
不能使用
auto
声明数组类型数组不支持复制
数组的长度必须为一个常量表达式
字符串的数组特殊性 (在字符串结尾隐式加上
\0
表示结束)char str[] = "Hello"; //char[6] char srt[] = {'H','e','l','l','o'}; //char[5]
数组的复杂声明
指针数组与数组的指针
int x1,x2,x3; //指针数组 int* a[3] = {&x1, &x2, &x3}; //a类型为int*[3]
int a[3] = {1, 2, 3}; //数组的指针 int (*b)[3] = &a; //b类型为int(*)[3]
声明数组的引用
int a[3] = {1, 2, 3}; int (&b)[3] = a;
数组中元素的访问
- 数组对象是一个左值(l-value)
(左值:能够放在等号左侧的值(C),C++中 locater-value)
- 使用时会转换成相应的指针类型
x[y]; // 会被解析成*(x+y)
数组到指针的隐式转换
通常会产生转换
隐式转换会丢失一部分信息
int a[3] = {1,2,3}; //a int[3]
auto b = a; //b int*
可以通过声明引用来避免隐式转换
int a[3] = {1,2,3}; //a int[3]
auto b = a; //b int*
auto& c = a; //c int(&)[3]
不能使用extern
指针来声明数组
获得s指向数组开头和结尾的指针
int a[3] = {1, 2, 3};
a;
&(a[0]); //开头指针
std::begin(a); // int*
std::cbegin(a); // const int*a+3;
&(a[3]); //结尾指针
std::end(a);
std::cend(a); //end和cend指向数组最后一个元素的下一个元素
数组的其他操作
求元素个数
sizeof
对象的字节数(C语言常用)sizeof(a)/sizeof(int)
std::size(a);
(推荐方法)std::cend(a) - std::cbegin(a);
运行期操作 (编译器可以解决,不推荐)
数组的遍历
int a[3] = {1,2,3}; size_t index = 0; while(index < std::size(a)){index = index + 1; }
int a[3] = {1,2,3}; auto ptr = std::cbegin(a); while(ptr != std::cend(a)){ptr = ptr + 1; }
for(int x:a){//语法塘 c++insight可以查看 简化书写 C++11开始 }
C字符串
字符串本质上也是数组
char str[] = "Hello"; //char[6] null-terminated string
auto ptr = str; //char*
隐式转化为指针类型,对字符串进行操作时寻找'\0'
代表字符串结束
返回字符串长度
#include <cstring>
strlen(a);
多维数组
本质:数组的数组
int a[3][4];
聚合初始化
int a[][4] = {{1,2,3},{4,5,6,7}};
多维数组的索引和遍历
int x[3][4] = {1,2,3,4,5};
for(auto& p:x){for(auto q:p){std::cout<< q <<'\0';}
}
指针与多维数组
第2节 vector
C++标准库中定义的类模板
std::vector<int> x;
与内建数组相比,更侧重于易用性(性能差于内建数组)
- 可复制、可在运行期动态改变个数
构造和初始化
- 聚合初始化
std::vector<int> a = {1,2,3};
- 其他
std::vector<int> a(3);
其他方法
获取元素个数,判断是否为空
std::vector<int> a = {1,2,3}; a.size(); //输出元素个数 a.empty(); //输出是否为空
插入、删除元素
a.push_back(2); //结尾插入一个元素2 a.pop_back(); //从结尾删除一个元素
vector的比较
元素的索引和遍历
[]
v.s.at
at在索引超出时会报错,更加安全begin/end
函数 v.s.begin/end
方法auto x = a.begin(); auto y = a.end(); //返回一个iterator
迭代器iterator
- 模拟指针的行为
- 包含多种类别,每种类别支持的操作不同
- vector对应随机访问迭代器
- 解引用与下标访问
(*x)
y[1]
- 移动
- 两个迭代器相减求距离
- 两个迭代器比较
- 解引用与下标访问
vector相关其他内容
添加元素可能使迭代器失效
多维vector
std::vector<std::vector<int>> x;
x.push_back(std::vector<int>());
x[0].push_back(1);
std::cout<<x[0][0]<<std::endl;std::vector<std::vector<int>> y = {{1,2,3},{4,5}};
从.
到->
std::vector<int> x;
std::vector<int>* ptr = &x;
(*ptr).size();
ptr->size(); //语法塘 同上一行相同
第3节 string
C++标准库中定义的类模板,用于内建字符串的代替品
std::string
是std::basic_string<char>
的别名
与内建字符串相比,更侧重于易用性
- 可复制、在运行期动态改变字符串的个数
构造与初始化
#include <string>
std::string str = "Hello";
str = str + "!";
std::string str2 = "World";
std::string str3;
str3 = str + str2;
其他方法
- 尺寸相关(size,empty)
- 比较
- 赋值
- 拼接 (直接加)
- 索引
str[2]
- 转换为C字符串
auto ptr = str.c_str(); //返回一个char*类型的指针,指向null-terminated的字符数组的首元素地址
C++基础:第四章 数组、vector和字符串相关推荐
- 大学计算机ppt操作表格,大学计算机应用基础第四章 电子表格软件Exc.ppt
大学计算机应用基础第四章 电子表格软件Exc.ppt (47页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.9 积分 第四章电子表格Excel 20 ...
- 大学计算机基础第四章ppt,大学计算机基础第四章.ppt
<大学计算机基础第四章.ppt>由会员分享,可在线阅读,更多相关<大学计算机基础第四章.ppt(38页珍藏版)>请在装配图网上搜索. 1.大学计算机基础 (第2版),第4章 数 ...
- 计算机软件基础第四章答案,计算机应用基础第四章
<计算机应用基础第四章>由会员分享,可在线阅读,更多相关<计算机应用基础第四章(3页珍藏版)>请在人人文库网上搜索. 1.1[单选题]使图片按比例缩放应选用().窗体顶端A.拖 ...
- 第四章计算机基础,大学计算机基础第四章.ppt
<大学计算机基础第四章.ppt>由会员分享,可在线阅读,更多相关<大学计算机基础第四章.ppt(38页珍藏版)>请在人人文库网上搜索. 1.大学电脑基础(版本2).第4章数据库 ...
- 二进制除法教程计算机基础,计算机应用基础第四章《二进制的学习》课件.ppt...
<计算机应用基础第四章<二进制的学习>课件.ppt>由会员分享,可在线阅读,更多相关<计算机应用基础第四章<二进制的学习>课件.ppt(26页珍藏版)> ...
- JAVA基础第四章-集合框架Collection篇
业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...
- Python学习入门基础 -- 第四章 列表、元组、字典、字符串变量使用、变量进阶
Python基础入门知识点总结传送门 第一章 认识Python.Python常用集成开发环境PyCharm 第二章 注释.变量基本使用.变量的命名 第三章 运算符.判断if语句.while和for循环 ...
- Python基础——第四章:Python循环语句
前言 本文是根据黑马程序员Python教程所作之笔记,目的是为了方便我本人以及广大同学们查漏补缺. 不想做笔记直接来我的频道.当然啦,自己的笔记才是最好的哦! PS:感谢黑马程序员! 教程链接:黑马程 ...
- 计算机硬件技术基础第四章ppt,管理N计算机硬件技术基础第4章.ppt
资料来自网络,请保护知识产权,请您下载后勿作商用,只可学习交流使用.第4章 五.DVD驱动器 DVD光盘( Digital Video Disk) ①用于存放MPEG-2格式的数字视盘而诞生. ②DV ...
- 计算机软件基础第四章答案,2017计算机应用基础第四章word文字处理软件附答案.doc...
第四章 word文字处理软件 一.判断题?共10题,20分 12分在打开的最近文档中,可以把常用文档进行固定而不被后续文档替换.( ) A对 B错 正确答案:?A?学生答案:?A 22分在word20 ...
最新文章
- is_uploaded_file函数引发的问题
- 云时代服务器端工程师必备 CDN 技能包
- 怎样去除excel表中的虚线_Excel教程:F1键强大的功能,你会用吗?
- ubuntu命令创建用户无法登入问题
- MySQL- SQL执行计划 统计SQL执行每阶段的耗时
- Intel Edision开发工具简介
- 软件设计模式之适配器模式(JAVA)
- iOS之UI--使用SWRevealViewController实现侧边菜单功能详解实例
- 备战蓝桥杯—枚举——[USACO Nov08]成交
- HTML基础知识点(1)
- Static 静态内部类
- 0302 GDB调试走起【给PHP写插件】
- flexsim怎么设置传送带方向_Flexsim仿真教程学习(六)-分拣系统
- 读书笔记-干法-永不言弃绝不妥协埋头苦干
- 自动化运维工具-ansible入门(一)
- Make sure that `gem install sqlite3 -v '*.*.*'`succeeds before bundling Error: 问题解决
- 【Java设计模式】组合模式
- 『矩阵论笔记』详解最小二乘法(矩阵形式求导)+Python实战
- 微交易平台搭建开发-盘内实时K线对接
- mysqlbug日记