【C++学习笔记】字符串、向量和数组

news2025/1/13 14:13:55

字符串类型

1.C语言风格字符串:char 变量名[] = "字符串值"
1. char: 字符常量或者单个字符 单引号定义字符串常量用 双引号 定义
2. 输出直接用cout

char str1[] = "hello world";
cout << str1 << endl;

2.C++语言风格字符串:string 变量名 = "字符串值"
**输出要包含头文件 #include<string> **

#include<string>
// 输出要包含头文件 
string str3 = "hello world";
cout << str3 << endl;

初始化string 对象的方式
在这里插入图片描述
在这里插入图片描述

Vector

vector是模板 不是类型
初始化vector 方法:在这里插入图片描述
初始化vector时,注意区分花括号和圆括号。
圆括号提供的值为构造vector对象的容量和值
花括号提供的值为vector 的列表初始化

vector<int> v1(10) // v1有10个int元素,每个值为0
vector<int> v2{10} // v2有1个int元素,值为10
vector<int> v3(10, 1) // v3有10个元素,值均为1
vector<int> v4{10, 1} // v4有2个元素,值为10和1

!!!在这里插入图片描述

C风格字符串

c++的字符串头文件是 string 对应string
c风格字符串头文件是 cstring对应char

string转换为char 函数 c_str(), 该函数的返回类型为const *char类型,定义时要注意

string s = "hahah haha";
const char *ss = s.c_str();
cout << s << endl;
cout << *ss << endl;

需要注意
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

const char a[] = {'h', 'e', 'l', 'l', 'o'};
const char *p = a;
while(*p)
{
	cout << *p << endl;
	++p;
}

输出结果: 以列表初始化方式赋值的C风格字符串与以字符串字面值赋值的区别,以字符串字面值赋值的字符串在最后会额外添加一个空字符表示字符串的结束,而前者不会。所以,当遍历完a中的5个字符后,没有遇到空字符,无法跳出while循环,会继续运行直到找到空字符。
!!! char 输出时出现乱码,大概率是因为 在初始化char时,没有添加空白符’\n’,发生了越界。

h
e
l
l
o


<

若想达到原有效果代码:

const char a[] = {'h', 'e', 'l', 'l', 'o', '\0'};
const char *p = a;
while(*p)
{
	cout << *p << endl;
	++p;
}

输出结果:

h
e
l
l
o

对于vector、数组等指针相加合法但是无意义的原因: 指针也是对象,其有三个属性,指针本身的值value、指针所指对象content及指针本身在内存中的存储位置address。
指针本身的值value:是内存地址的值,表示所指对象在内存中的存储地址
指针所指对象content:指针指向的对象
指针本身在内存中的存储位置address:指针本身也在内存中的某个位置,也有自己的地址

指针相加时,是指将两个指针所指对象的地址加在一起,合法但是无意义;而相减是指两个对象之间的地址差代表指针所指同一数组或vector的两个不同元素之间的距离。

利用别名遍历多维数组
设数组a[3][4]为三行四列的数组,可以将数组的一行,即将一个含有4个元素的数组,定义为一个别名类型,如using int_arr = int[4]

#include<iostream>
using namespace std;
using int_arr = int[4]; // 别名简化
int main()
{
    int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
    cout << "范围for语句:" << endl;
    for(int (&row)[4] : a){
        for(int &col : row){
            cout << col << " " ;
        }
        cout << endl;
    }
    cout << "下标for:" << endl;
    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 4; j++){
            cout << a[i][j]<<  " ";;
        }
        cout << endl;
    }
    cout << "指针for:" << endl;
    for(int (*p)[4] = a; p != a + 3; p++){
        for(int *q = *p; q != *p + 4; q++){
            cout << *q <<  " ";
        }
        cout << endl;
    }

    //利用别名
    cout << "利用别名范围for语句:" << endl;
    for(int_arr &row : a){
        for(int &col : row){
            cout << col << " " ;
        }
        cout << endl;
    }

    cout << "下标for:" << endl;
    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 4; j++){
            cout << a[i][j]<<  " ";
        }
        cout << endl;
    }

    cout << "指针for:" << endl;
    for(int_arr (*p) = a; p != a + 3; p++){
        for(int *q = *p; q != *p + 4; q++){
            cout << *q <<  " ";
        }
        cout << endl;
    }
    return 0;

}

数组

数组的以指针类型的形式进行调用 ^6htdd4

一维数组定义

  1. 数据类型 数组名[数组长度];
  2. 数据类型 数组名[数组长度] = {值1, 值2, ...}; 若初始化时值的个数 ≠ 数组长度,则会用0补全
  3. 数据类型 数组名[ ] = {值1, 值2, ...}
#include<iostream>
using namespace std;

int main()
{
    // 定义1 数据类型 数组名[数组长度];
    int arr1[5]; // 声明数组
    // 赋值 进行初始化
    arr1[0] = 1;
    arr1[1] = 2;
    arr1[2] = 3;
    arr1[3] = 4;
    arr1[4] = 5;
    for(int i = 0; i < 5; ++i)
    {
        cout << arr1[i] << endl; // 输出数组1
    }
    
    // 定义2 数据类型 数组名[数组长度] = {值1, 值2, ...}  
    // 若初始化时值的个数 ≠ 数组长度,则会用0补全
    int arr2[5] = {6, 7, 8};
    for(int i = 0; i < 5; ++i)
    {
        cout << arr2[i] << endl; // 输出数组2
    }
    
    // 定义3 数据类型 数组名[ ] = {值1, 值2, ...}
    int arr3[ ] = {11, 12, 13, 14, 15};
    for(int i = 0; i < 5; ++i)
    {
        cout << arr3[i] << endl; // 输出数组3
    }
    return 0;
}

数组的特点

  1. 放在一块连续的内存空间中
  2. 数组中每个元素数据类型相同

数组名作用

  1. 统计整个数组在内存中的长度 sizeof(数组名)
  2. 获取数组在内存中的**[[三、字符串、向量和数组#^6htdd4|首地址]]**(直接输出数组名),默认为十六进制,在前面加(int)可以转为十进制 cout << 数组名 << endl; ^ah4z70

二维数组定义

  1. 数据类型 数组名[行数][列数];
  2. 数据类型 数组名[行数][列数] = {{值1, 值2,...},{值1, 值2,...}};
  3. 数据类型 数组名[行数][列数] = {值1, 值2, 值3, 值4,...};
  4. 数据类型 数组名[ ][列数] = {值1, 值2, 值3, 值4,...};
#include<iostream>

using namespace std;

int main()
{
    // 定义方式 1
    int arr[2][3];
    arr[0][0] = 1;
    arr[0][1] = 2;
    arr[0][2] = 3;
    arr[1][0] = 4;
    arr[1][1] = 5;
    arr[1][2] = 6;  

    for(int i = 0; i < 2; ++i)
    {
        for(int j = 0; j < 3; ++j)
        {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }
    cout << endl;  

    // 定义方式2 没有值的位置用0 补充
    int arr2[2][3] = {{1,2 },{4,5,6}};
    for(int i = 0; i < 2; ++i)
    {
        for(int j = 0; j < 3; ++j)
        {
            cout << arr2[i][j] << " ";
        }
        cout << endl;
    }
    cout << endl;
    
    //定义方式3 没有值的位置用0 补充
    int arr3[2][3] = {1, 2, 3};
    for(int i = 0; i < 2; ++i)
    {
        for(int j = 0; j < 3; ++j)
        {
            cout << arr3[i][j] << " ";
        }
        cout << endl;
    }
    cout << endl;
  
    //定义方式4
    int arr4[ ][3] = {1,2,3,4};
    for(int i = 0; i < 2; ++i)
    {
        for(int j = 0; j < 3; ++j)
        {
            cout << arr4[i][j] << " ";
        }
        cout << endl;
    }
    cout << endl;
    return 0;
}

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

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

相关文章

Linux环境下 通过V4L2读取视频+UDP发送图片文件

该图为整个项目的流程图 其中左边的流程为总流程&#xff0c;包括通过中断读取摄像头的帧数据&#xff0c;通过内存映射将内核态的数据映射到用户态&#xff0c;读取用户态的数据&#xff0c;采用循环发送图片数据。 右边是发送图片的流程图&#xff0c;将用户态的缓冲区的数…

780E编译底包教程

这里写目录标题 准备1 安装开发环境准备2 拉取编译工程源码 代码编译修改或者增加用户程序说明 准备 1 安装开发环境准备 需要用户自行安装好Xmake\vscode\git 环境教程传送门 2 拉取编译工程源码 注意, 需要两个库 主库 https://gitee.com/openLuat/LuatOS bsp库 https://…

LAMP架构中的网站搭建

前言&#xff1a;本次操作依赖于LAMP的环境已经配置完全&#xff0c;网站也是依赖于开发人员现有的网站包框架&#xff0c;实施在LAMP已搭建好的环境进行安装部署 1. 对mysql进行操作 ——创建数据库&#xff0c;并进行授权 1.创建数据库&#xff0c;并进行授权 mysql -u roo…

Redis6学习

Redis6 1. NoSQL数据库简介 1.1 技术发展 技术的分类 1、解决功能性的问题&#xff1a;Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN。 2、解决扩展性的问题&#xff1a;Struts、Spring、SpringMVC、Hibernate、Mybatis。 3、解决性能的问题&#xff1a;NoSQL、Jav…

国产什么牌子的蓝牙耳机音质好?国产适合听音乐的蓝牙耳机推荐

现如今&#xff0c;蓝牙耳机的性能越来越多&#xff0c;一款蓝牙耳机不可能将各种性能做到极致。大家在选择蓝牙耳机时&#xff0c;无外乎从佩戴、音质、降噪、延迟等因素出发&#xff0c;那么&#xff0c;国产什么牌子的蓝牙耳机音质好&#xff1f;根据这个问题&#xff0c;我…

Docker更换国内镜像源

什么是Docker Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。 容器是完全…

【三十天精通Vue 3】第十二天 Vue 3 的函数式组件详解(过滤器已废弃)

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录 引言一、Vue3 中的函数式组件1.1 函数式组件的概念和特点1.2 函数…

DolphinDB 计算节点使用指南

导读 为了提升 DolphinDB 在高并发读写场景下的性能与稳定性&#xff0c;DolphinDB 在架构上引入了计算节点 &#xff08;compute node&#xff09; 。计算节点接管了数据节点的部分职能&#xff0c;负责响应客户端的请求并返回结果。在架构层面&#xff0c;将集群的计算与存储…

QT - 布局方式

Qt里面的头文件和类名是一致的&#xff0c;知道头文件就知道类名&#xff0c;反之亦然 Qt头文件是没有.h的&#xff0c;基本都是以大写的Q开头 后续的代码编写都在widget.h和widget.cpp 一. widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget>/*QT系统自己使…

机器学习(六):基于高斯贝叶斯对面部皮肤进行预测分析

基于高斯贝叶斯对面部皮肤进行预测分析 作者&#xff1a;i阿极 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&#x1f4…

ROS--机器人小车仿真rviz

URDF练习 需求描述: 创建一个四轮圆柱状机器人模型&#xff0c;机器人参数如下,底盘为圆柱状&#xff0c;半径 10cm&#xff0c;高 8cm&#xff0c;四轮由两个驱动轮和两个万向支撑轮组成&#xff0c;两个驱动轮半径为 3.25cm,轮胎宽度1.5cm&#xff0c;两个万向轮为球状&…

企业业财数字化建设-财务管理领域的产品设计

数字经济时代&#xff0c;企业数字化建设成为发展的必经之路&#xff0c;更多的企业搭建全渠道的营销&#xff0c;交易&#xff0c;履约和售后体系触达和服务用户&#xff0c;特别是面向小B和C端用户&#xff0c;交易变得更灵活多变。使得资源管控&#xff0c;稳定保守为底层基…

C语言的缺陷/错误处理问题探讨

最近遇到一个问题&#xff0c;先看看如下代码&#xff1a; uint8_t Bcd2Dec01(uint8_t bcd) {uint8_t one (bcd & 0x0F);uint8_t ten (bcd & 0xF0) >> 4;if ((one > 9) || (ten > 9)){printf("请输入合法的BCD码&#xff01;");return 0;}retu…

《C++内存管理》

本文主要介绍C内存管理的知识&#xff0c;主要包括new和delete&#xff0c;其实很简单&#xff0c;类比我们的C语言的内存管理malloc/free&#xff0c;就是在堆上申请内存的 小知识点&#xff1a; C构造对象的顺序&#xff1a;先构造全局&#xff0c;再构造局部静态对象&#x…

一些解决方案

文件异步下载方案 1 set QueryBussessType manually different type --> different resolving code、wherecondition 2. frontend request with the type 3. get excelHeader --> groovyUtil load from db 4. getData from db with pagination 5. saveData in an excel 6…

【测试面试】你要的宝典,软件接口测试面试题大全(总结)--附答案

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、接口测试主要目…

将war包发布到容器中的tomcat

文章目录 将war包直接发布到容器中使用数据卷将war包持久化到docker的宿主机(CentOS7) 将war包直接发布到容器中 1、将windows中的文件通过xftp程序传到centOS7中 2、创建容器&#xff0c;通过docker中的命令将web.jar复制到tomcat容器中 # 查看docker中的镜像 ~]$ docker imag…

0.8秒捕捉,速度超乎想象,小米和WPS用户太激动,office用户已用

只需0.8秒就能捕捉 距离4月18日小米13ultra发布会时间还剩一天。这几天雷军的微博已经把小米13ultra的亮点已经做了很多铺垫宣传。 除了系统和硬件之外&#xff0c;就是这次小米13ultra最大的“杀手锏”的就是“徕卡相机”。连宣传文案都改成了&#xff1a;一个伟大的瞬间&…

【UE】玩家位置存档

在上一篇博客中&#xff08;【UE】将存档的值显示在控件蓝图上&#xff09;我们介绍了如何将存档的值显示在控件蓝图上&#xff0c;本篇博客要介绍的是如何将玩家位置进行存档。 效果 可以看到重新进入游戏时&#xff0c;角色在存档点出现&#xff0c;而不是玩家出生点 步骤 …

XMU 算法分析与设计第三次上机题解

文章目录 一、BFS试炼之微博转发二、DFS试炼之不同路径数三、并查集试炼之合并集合并查集的介绍 四、堆排序堆排序的介绍 五、厦大GPA&#xff08;分组背包&#xff09;分组背包介绍 六、消防安全指挥问题&#xff08;最短路Floyd&#xff09;七、铺设光纤问题(最小生成树Prim)…