(2)c++学习笔记--字符串,向量和数组

【C++笔记】字符串、向量和数组 string、vector、迭代器、数组、多维数组 阅读详情
string
  1. string.size()函数,返回值是自定义的size_type类型,它至少是unsigned,所以要注意与int用在一个表达式的时候。
  2. 字面值和string对象相加的时候,必须确保+号两侧至少有一个是string对象。
//这就是错误的,都是字面值
string str = "hello ," + "world!";

3 .c++版本的c标准库头文件,比如c中ctype.h,在c++中是cctype
4. 遍历string

//将str小写转大写,遍历的同时要修改,必须用&
string str("hello, world!")
for(auto &c : str){
    c = toupper(c)
}

5 . string: 下标遍历和迭代器遍历

vector
  1. vector: 一个容器,里面的对象类型一致。c++有类模板和函数模板,vector是类模板,模板本身不是类或函数,而是编译器生成类或函数的说明。
  2. 不存在包含引用的vector,因为引用不是对象。
  3. 初始化:
vector<int> v1{10}; //10个int,每个都为0
vector<String> v2{10}; //因为10是int,不是string,所以这里会处理成(10)

4 . 添加元素:push_back(),有一点需要尤其注意,在c或者Java中创建对象时指定容量更好,但是c++中不是,为了高效的添加元素,不指定容量更好,只有一种情况是例外,就是每个值都一样。
5 . 不能再范围内循环的时候改变vector的大小。

vector<int>::size_type //正确
vector::size_type     //错误 

6 . i++ 和 ++i: 如果不看返回值,意思是一样的,如果有返回值:

int i = 3;
int a = ++i;   //b=4,i=4
int i = 3;
int b = i++;   //b=3,i=4

7 . 尾迭代器:begin和end,begin指向的是第一个元素的迭代器,但是end指向的是最后一个元素的下一个位置的迭代器,这个位置是一个标志位,如果为空,begin和end指向的一样,都是尾迭代器。

vector<int> v;
auto it1 = v.begin();  //it1的类型是:vector<int>::iterator
auto it2 = v.end(); //it2的类型是:vector<int>::const_iterator
//如果对象只需要读而无需写的话,用const_iterator比较好,所以c++提供了cbegin()和cend(),无论vector对象是否是常量,都返回const_iterator

8 . 箭头运算符 -> ,就是把解引用和成员访问结合在一起了。

(*it).empty();   //it是一个迭代器,两行代码效果一样
it.empty(); 

9 . difference_type: 两个迭代器之间的距离。

iterator可以进行算术运算,所得到的的结果类型为difference_type

数组
  1. 数组声明时必须指明大小,数组中元素的个数也是数组类型的一部分,所以大小必须是一个常量表达式。
  2. 数组和vector,其元素必须是对象,所以也不能有引用数组。
  3. 数组类型必须给定,不允许用auto来推断。
  4. 不允许使用数组为其他数组赋值,也不能将一个数组的内容拷贝到另外一个数组。
int a[] = {1,2,3};
int b[] = a; //错误 , 不能用一个数组初始化另外一个数组
b = a; //错误,不能把一个数组直接赋值给另外一个数组

5 . 特殊的字符数组,如果用字面值初始化,会在后面加一个空字符。

char a[] = {'a' , 'b' ,'c'}; //大小为3
char b[] = "abc"; //大小为4,会在末尾加一个空字符

6 . 复杂的数组声明

int *p[10]; //p是一个含有10个int指针的数组。
int (*p)[10]; //p是一个指针,指向含有10个int的数组的指针。
int (&p)[10]; //p是一个引用,引用的是含有10个int的数组。
int *(&p)[10]; //p是一个引用,引用的含有10个int指针的数组。

7 . 指针和数组:使用数组的时候编译器默认会把它转为指针。

int a[] = {1,2,3,4,5};
int *p = a; //等价于int *p = &a[0];
++p;  //a[1];
int *p2 = p + 1;  //p2指向a[2];
int *begin = begin(a);  //获取首指针和尾指针
int *end = end(a);

8 . ptrdiff_t, cstddef头文件中定义,指针做运算操作的结果类型。
9 . 当指针执行下标运算的例子:

int a[] = {1,2,3,4,5};
int *p = &a[2];
int j = p[1]; // 相当于*(p+1),就是a[3];

10 . c中的string: c中string是用char[],c中并没有字符串这种类型,只是一种约定俗成的写法,字符串以空字符结束。

char a[] = {'a','b','c'};//a是一个字符数组,但是如果把它当成字符串来用,比如使用strlen函数的时候,就会出错,因为它不是以'\0'结尾的。
char b[] = "abc"; //这样就没问题,编译器会默认加一个

11 . 字符串拼接

//c++中string标准库

string result = str1 + " " + str2;

//c中最好使用strcpy和strcat函数,但是必须先定义好result数组,此时str1和str2都是char[]

char result[100];
strcpy(result , str1);
strcat(result , " ");
strcat(result , str2);

12 . c和c++字符串互相转换

char aaaa[] = {'a' , 'b' ,'c' , '\0'};
    string str(aaaa);
    char bbb[5];
    strcpy(bbb , str.c_str());

13 . 在使用范围内for循环的时候,除了最内层的循环外,其他所有循环控制变量都应该是引用类型。
14 . 在使用多维数组的时候也要注意,也会将其转换为指向首位元素的指针。
15 . tips,使用类型别名命名数组,能让程序更简洁。

C++基础:字符串、 向量和数组 一、命名空间的using声明 1、using声明的基本用法 std: :cin表示从标准输入中读取内容。此处使用作用域操作符(::)的含义是:编译器应从操作符左侧名字所示的作用域中寻找右侧那个名字。因此,std: :cin的意思就是要使用命名空间std中的名字cin。 通过更简单的途径也能使用到命名空间中的成员。本节将学习其中一种最安全的方法,也就是使用using声明(using declaration)。有了using声明就无须专门的前缀(形如命名空间::)也... 阅读详情

相关推荐

【C++系列】字符串、向量和数组

文章目录字符串、向量和数组1 命名空间的 using 声明基本使用使用规则2 标准库类型 string定义和初始化 string 对象string 对象上的操作处理 string 对象中的字符3 标准库类型 vector定义和初始化 vector 对象向 vector 对象中添加元素其他 vector 操作4 迭代器迭代器的使用迭代器运算5 数组定义和初始化内置数组数组的初始化(仅有两种方法)数组的遍历指针和数组C 风格的字符串多维数组定义和初始化多维数组的引用多维数组的遍历 字符串、向量和数组 这里讲的

weixin_54707168的博客 484

C++字符串和向量

陷阱:C字符串使用=和== char a_string[10]; a_string="Hello" 非法 strcpy(a_string,"Hello"); 合法 转载于:https://www.cnblogs.com/hsy1941/p/8250958.html

weixin_30642869的博客 392

拉普拉斯矩阵

1、预备知识 拉普拉斯矩阵定义为:L=D-W。其中,D为度矩阵,W为权重矩阵。 (1)D是对角矩阵,对角线上的元素时节点的度,即所有与该节点相关联的边的权重之和;对角线以外的元素为0。有向图的对角矩阵分为 出度矩阵 和 入度矩阵。 图1.1 无向图中的度矩阵 (2)W在无向图中是对称矩阵,在有向图中是非对称矩阵。 ...

zzhe 1万+

C++中数组和vector

本文基于邓俊辉编著《数据结构(C++语言版)(第3版)》、《C++ Primer(第5版)》以及网上的相关博文而写,博主水平有限,若有不妥处,欢迎指出。 一、数组 C++中数组是一种内置的数据类型。 数组是存放类型相同的对象的容器,数组的大小确定不变,不能随意向数组中增加元素。 1、定义和初始化内置数组 (1)数组的大小不变,(a[d],d为数组的维度),数组的维度必须是一个常量表...

weixin_30901729的博客 1359

故障诊断知识库建设指南

从数据融合到知识图谱构建,从智能推理引擎开发到动态进化机制落地,故障诊断知识库的建设路径已形成 “数据 - 知识 - 智能” 的闭环体系。随着大模型技术的深度融入,知识库将实现从 “规则驱动” 到 “认知推理” 的跨越 —— 通过自然语言理解解析复杂故障描述、多模态分析融合图像与信号数据、预测性算法推演故障发展趋势,持续提升诊断的精准度与前瞻性。

极昆仑智慧 1230

如何利用DeepSeek自动生成PLC程序?

在工业自动化领域,PLC是核心控制设备,其编程效率和质量直接影响生产线的运行效果。 然而,传统PLC编程依赖工程师手动编写代码,不仅耗时耗力,还容易出错。通过自动生成PLC程序,DeepSeek不仅大幅提升了编程效率,还优化了代码质量。 那么DeepSeek到底能否自动生成PLC程序呢? 有位电气工程师就尝试让DeepSeek设计一套五层电梯控制系统的PLC程序,下面就让我们看看吧。 技术原理:DeepSeek如何实现自动编程DeepSeek利用自然语言处理技术,将工程师输入的文本指令转换为PLC代码。例

Qinmingyue13的博客 6169

学习下c++中的向量(Vectors)

一直没有好好学过c++的向量(Vector),但是看好多开源代码中被大量使用,所以,学习学习,转自维基百科         Vector 是C++标准程序库中的一个类,可视为会自动扩展容量的数组,以循序(Sequential)的方式维护变量集合。vector的特色包括支持随机存取,在集合尾端增删元素很快,但是在集合中间增删元素比较费时。vector是C++标准程序库中的众多容器(containe

rocispeng的专栏 1万+

IOPaint模型部署教程

IOPaint是一款功能全面且强大的AI图像处理工具,它不仅免费开源,还由SOTA(State-of-the-Art,即最先进)AI模型驱动,为图像编辑和修复带来了前所未有的便利和高效。以下是对IOPaint的详细介绍:

SJJS_1的博客 1540

c++中的向量_C ++中的向量

c++中的向量A Vectors in C++ is an array-like container that can change dynamically in size. Being a part of the C++ STL, a Vector can support various dynamic array operations. C ++中的Vector是类似于数组的容器,可以动态改变...

从零开始的教程世界 8278

Yocto系列讲解[入门篇] 2 - 演示运行qemux86-64虚拟机

手把手教大家怎么编译Yocto,并运行一个qemux86虚拟机

fulinux的博客 1万+

android studio 2022打开了v1 签名但是生成的apk没有v1签名问题

我使用了Android Studio Flamingo | 2022.2.1 Patch 2版本的IDE编译了一个apk,但是apksigner查看apk的签名信息时,发现只有v2签名,没有v1签名。试着改小一下minSdkVersion 为23重新编译apk,再检测一下签名版本v1居然打开了!参考网上搜索到的方法,手动在build.gradle里面添加。但是编译出来的apk还是只有v2的签名。里面提到了v1签名还和。

hedalei的博客 464

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

本书的第三章几乎就是在讲明白迭代器,数组下标和指针之间的关系。 1,首先迭代器的运算类似于指针运算,迭代器类似于指针,但是迭代器并不使用取地址符,而是通过其类中的begin()函数和end()函数来取到第一个元素的位置和最后一个元素的下一个位置。其解引用的方式和指针一样就是加个*。迭代器支持的运算指针也全都支持,也因此迭代器几乎可以看作指针的一个父类 2,数组下标其实就是数组中首个元素的位置加上下标值后的位置所对应的一个指针(这样也能解释为什么java中数组的元素可通过形参改变了。) 比如下面这个 p //

weixin_45583482的博客 163

PCIE的MSI中断处理机制与优化策略

PCIe设备的。

xiaoheshang_123的博客 513

C++ Primer 5th学习笔记2 字符串、向量和数组

一、字符串、向量、数组 1 标准库类型string   标准库类型string表示可边长的字符序列,使用时必须先包含string头文件#include &amp;lt;string&amp;gt;,文件中还需要声明using std::string; 1.1 定义和初始化string对象 eg 声明形式 描述 string s1 默认初始化,s1是一个字符串 string s2(s1) s2是...

会飞的鱼的博客 239

slew dreate,slew threshold与transition计算

​只看rise情况下,from pin取slew threshold10%-90%的区间,slew derate为1,计算得到transition为1.002e-10,to pin的slew threshold 为30%-70%,slew derate 0.5,从波形列表上取相近的值3.75e-10和8.75e-10,计算得到transition为(8.75e-10-3.75e-10)/0.5=1e-9,考虑精度和取值区间问题,基本符合工具计算的值,如下:​。如下示例,在.lib库中有定义以下内容。

m0_61544122的博客 791

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

《C++Primer 5e》学习笔记(2):字符串、向量和数组

1.作用域操作符(::)的含义:编译器应从操作符左侧名字所示的作用域中寻找右侧那个名字。当左侧名字为空时即为全局变量。 2.对于using声明:每个名字都需要有独立的using声明,且头文件中不应包含using声明。 3.标准库类型string(string是一个类)需要有头文件#include 和命名空间using std::string; 4.getline(is,s)函数的

AC_Gibson的专栏 939

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

《C++ Primer》习题参考答案:第3章 - 字符串、向量和数组

专栏C++学习笔记 《C++ Primer》学习笔记/习题答案 总目录 https://blog.youkuaiyun.com/TeFuirnever/article/details/100700212 —————————————————————————————————————————————————————— 《C++ Primer》学习笔记(三):字符串、向量和数组 第三章 字符串、向量和数组 练...

种树最好的时间是10年前,其次是现在!!! 4461

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

《C++ Primer》学习笔记(三):字符串、向量和数组

专栏C++学习笔记 《C++ Primer》学习笔记/习题答案 总目录 https://blog.youkuaiyun.com/TeFuirnever/article/details/100700212 —————————————————————————————————————————————————————— 文章目录专栏C++学习笔记字符串、向量和数组命名空间的using声明(Namespace us...

种树最好的时间是10年前,其次是现在!!! 5529

第3章 字符串、向量和数组【C++】

字符串、向量和数组【C++】、命名空间的using声明、头文件不应含using声明、标准库类型string、定义和初始化string对象、string对象上的操作、getline函数的返回值、std::string::size_type类型、字符串相加要注意的事、处理string对象中的字符、遍历字符串字符、下标的随机访问、标准库类型vector、定义和初始化vector、向vector内添加元素、vector其他操作、遍历vector、不能用下标的形式添加元素...

高万禄的博客 1756

C++ 学习笔记之(3)-字符串、向量和数组

C++ 学习笔记之(3)-字符串、向量和数组 C++ 学习笔记之(3)-字符串、向量和数组 命名空间的using声明 标准库类型 string 定义和初始化 string 对象 string 对象上的操作 处理 string 对象中的字符 标准库类型 vector 定义和初始化 vector 对象 其他 vector 操作 迭代器介绍 使用迭代器 迭代器运算 数组 定义和初始化内...

hao555sky 365

终极C++字符串、向量和数组完全教程:Cpp-Primer第三章答案深度剖析指南

C++ Primer第三章是掌握C++基础容器的关键章节,本文将通过Cpp-Primer项目中ch03目录下的习题答案,系统讲解字符串、向量和数组的核心用法与最佳实践。无论你是C++初学者还是需要巩固基础的开发者,这份深度指南都能帮助你快速掌握这些重要数据结构的使用技巧。 ## 📚 字符串(std::string)完全解析 字符串是C++程序中最常用的数据类型之一,ch03目录下的多个习题展

gitblog_01191的博客 974

C++学习2 字符串、向量和数组

C++学习2 字符串、向量和数组梁子20163933string表示可变长的字符串序列,vector存放的是某种给定类型对象的可变长序列。 命名空间的using声明 域作用符(::)用来将命令空间中的函数或对象进行调用。 可以使用using声明来使得可以直接访问命名空间或者命名空间中的某个函数。 using std:cin; //这样就可以直接调用cin函数 ...

weixin_30788619的博客 133

c++向量和数组的区别_一本正经的聊数据结构(2):数组与向量

前文传送门:一本正经的聊数据结构(1):时间复杂度引言这个系列没有死,我还在更新。最近事情太多了,这篇文章也是断断续续写了好几天才凑完。上一篇我们介绍了一个基础概念「时间复杂度」,这篇我们来看第一个真正意义上的数据结构「数组」。那为什么题目中还会有一个向量呢?这个是什么东西?不要急,且听我慢慢道来。内存在聊数组之前,需要先了解一个硬件,这个就是我们电脑上内存。先了解一下内存的物理构造,一...

weixin_39638188的博客 3448

C++ Primer 学习笔记二:字符串、向量与数组

C++ Primer 学习笔记二:字符串、向量与数组 本文记录学习C++ Primer第二章的内容。对于一些比较基础的内容略过。 范围for语句 范围for语句是C++11标准引入的for循环。这个语句可以遍历给定序列中的每个元素并执行操作。基本语法形式如下: for (declaration : expression) statement expression部分表示一个序列,declaration定义了一个变量,随着循环依次访问expression中的元素。注意循环内操作过程不能改变expre

weixin_44604025的博客 263

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

数据类型 数组名[数组长度];数据类型 数组名[数组长度] = {值1, 值2, ...};若初始化时值的个数 ≠ 数组长度,则会用0补全数据类型 数组名[ ] = {值1, 值2, ...}int main()// 定义1 数据类型 数组名[数组长度];// 声明数组// 赋值 进行初始化i < 5;++i)// 输出数组1// 定义2 数据类型 数组名[数组长度] = {值1, 值2, ...}// 若初始化时值的个数 ≠ 数组长度,则会用0补全i < 5;

Rose Future M 701

[C++ 面试基础知识总结]字符串,向量和数组

[C++ 面试基础知识总结]字符串,向量和数组参考书籍:《C++ Primer》目录C 面试基础知识总结字符串向量和数组 目录 string string的读写 stringsize_type类型 string对象和字面值相加 vector容器 vector的初始化 使用vector的注意事项 迭代器 迭代器运算符 使用迭代器实现二分查找 数组 初始化和赋值 字符数组 数组与指针 C风格字符串 多维

究极死胖兽的博客 1125
上一篇: (1)c++学习笔记--变量和基本类型
下一篇: (3)c 学习笔记—表达式,语句和函数
HHcoco
博客等级 码龄13年 46粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值