栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++基础:第四章 数组、vector和字符串

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++基础:第四章 数组、vector和字符串

文章目录

第4章 数组、vector和字符串

第1节 数组

注意事项数组的复杂声明数组中元素的访问数组到指针的隐式转换获得s指向数组开头和结尾的指针数组的其他操作C字符串多维数组 第2节 vector

构造和初始化元素的索引和遍历迭代器iteratorvector相关其他内容 第3节 string

第4章 数组、vector和字符串 第1节 数组

将一个到多个相同类型的对象串联到一起,所组成的类型

int a ; int b[10]; 区分类型,b的类型为int[10]初始化方式

缺省初始化int a[3] = {1,2}; //第三个元素为0int b[] = {1,2,3} //int[3] 注意事项

不能使用auto声明数组类型

数组不支持复制

数组的长度必须为一个常量表达式

字符串的数组特殊性 (在字符串结尾隐式加上表示结束)

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*

隐式转化为指针类型,对字符串进行操作时寻找''代表字符串结束

返回字符串长度

#include 
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 <<'';
    }
}

指针与多维数组

第2节 vector

C++标准库中定义的类模板

std::vector x;

与内建数组相比,更侧重于易用性(性能差于内建数组)

可复制、可在运行期动态改变个数 构造和初始化

聚合初始化 std::vector a = {1,2,3};其他 std::vector a(3);

其他方法

获取元素个数,判断是否为空

std::vector 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> x;
x.push_back(std::vector());
x[0].push_back(1);
std::cout<> y = {{1,2,3},{4,5}};

从.到->

std::vector x;
std::vector* ptr = &x;
(*ptr).size();
ptr->size();          //语法塘 同上一行相同
第3节 string

C++标准库中定义的类模板,用于内建字符串的代替品

std::string是std::basic_string的别名

与内建字符串相比,更侧重于易用性

可复制、在运行期动态改变字符串的个数

构造与初始化

#include 
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的字符数组的首元素地址

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/769399.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号