数组和容器

定义

相同数据类型的数据的集合

语法

int array[3] { };

本质

数组按照所申请的数据类型,向操作系统申请了一块连续的内存空间。如果数组没有初始化,那么数组内元素的值就不知道为多少,可能变成内存本来就存在的值

基于数组的循环

目标:打印出数组所有元素

C+=11新语法:

for(变量类型 变量名称:数组)

{

循环内容

}

变量名称就代表了数组中的元素

变量类型可以和数组类型不相同

for(int x: array)
{
    std::cout<

二维数组在内存中的模拟状态

int array[2][3]

array[0][0]

array[0][1]

array[0][2]

array[1][0]

array[1][1]

array[1][2]

数组越界漏洞

数组的本质是向操作系统申请一块连续的内存,而数组越界是访问了不该访问的地方,就会造成可能导致程序崩溃、丢失系统控制权等问题,比如array[3]={1,2,3},访问array[5]就是越界访问

std::array

介绍

array是一种容器,不仅仿照原生数组功能,另外加入了新的功能,std::array如果没有初始化,里面的值就可能会是内存之前已经存在的值

起源

由于原生数组存在越界漏洞等安全问题,C++提供了容器,std::array里面的at方法可以避免越界漏洞,当越界访问时,原生数组可能报错,可能不会,而std::array肯定会报错。

语法

引入头文件

std::arraystudentA

std::array<元素类型,元素个数>变量名

常见用法

size() : 返回元素个数

fill(100) : 将元素都设置成100

at():访问某个位置的元素

studentA.size();
studentA.fill(100);
studentA.at(0);

区别

std::array声明两个数组后,进行比较,两个数组相等

而有相同元素的原生数组不相等

std::vector

动态数组,也可以使用size 方法,std::vector如果没有初始化,系统会自动初始化里面的元素值为0

语法

引入头文件

std::vector<数据类型>变量名

std::vectorstudentA

std::vectorstudentA { 1,2,3 }

std::vectorstudentA(5)里面有5个元素

std::vectorstudentA(5,100)里面有5个元素,每个元素初始值为100

常见用法

at()、size()等,用法都是一样的

新增用法:

push_back 添加新元素

assign(3,100) 重新声明数组元素为3个,每个值为100

clear() 清空所有元素

empty() 确定是否为空,如果为空,则输出1,否则为0

数组和结构体的组合

struct Role
{
    int Hp;
    int damage;
    int Mp;
    bool bcase;
}
Role role[2]
{
    {100,200,200,1},
    {200,200,200,0}
}
//访问
role[0].Mp+=100;

你可能感兴趣的:(c++)