【C++ STL序列容器】array 数组

本文详细介绍了C++中std::array的基本原理,包括创建方式(不赋初值、赋默认值和指定值),以及其成员函数如begin(),end(),at(),fill()等,强调了array的安全性和使用场景。
摘要由CSDN通过智能技术生成

【 1. 基本原理 】

  • array 是在 C++ 普通数组的基础上添加了一些成员函数和全局函数。在使用上,它 比普通数组更 安全,且效率并没有因此变差
  • array 容器的 大小是固定的,无法动态的扩展或收缩,这也就意味着,在使用该容器的过程无法借由增加或移除元素而改变其大小,它只允许访问或者替换存储的元素。
  • array 以类模板的形式定义在 <array> 头文件 命名空间 std 中:
    在 array<T,N> 类模板中,T 用于指明容器中的存储的具体数据类型,N 用于指明容器的大小,需要注意的是,这里的 N 必须是常量,不能用变量表示。
namespace std{
    template <typename T, size_t N>
    class array;
}

【 2. array 的创建 】

2.1 不赋初值

  • 创建一个名为 myarray 的 array 容器,其包含 10 个浮点型元素。但是,由于未显式指定这 10 个元素的值,因此使用这种方式创建的容器中, 各个元素的值是不确定的(array 容器不会做默认初始化操作)
array<double, 10> myarray;

2.2 赋默认值

  • 将所有的元素初始化为 0 或者和默认元素类型等效的值:
    使用该语句,容器中所有的元素都会被初始化为 0.0。
array < double, 10> values {};

2.3 赋指定值

  • 在创建 array 容器的实例时,可以像创建常规数组那样对元素进行初始化:
array<double, 10> values {0.5,1.0,1.5,,2.0};
  • 这里只初始化了前 4 个元素,剩余的元素都会被初始化为 0.0,如下图所示:
    在这里插入图片描述

【 3. array 的成员函数 】

成员函数功能
begin()返回指向容器中第一个元素的随机访问迭代器。
end()返回指向容器最后一个元素之后一个位置的随机访问迭代器,通常和 begin() 结合使用。
rbegin()返回指向最后一个元素的随机访问迭代器。
rend()返回指向第一个元素之前一个位置的随机访问迭代器。
cbegin()和 begin() 功能相同,只不过在其基础上增加了 const 属性,不能用于修改元素。
cend()和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
crbegin()和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
crend()和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
size()返回容器中当前元素的数量,其值始终等于初始化 array 类的第二个模板参数 N。
max_size()返回容器可容纳元素的最大数量,其值始终等于初始化 array 类的第二个模板参数 N。
empty()判断容器是否为空,和通过 size()==0 的判断条件功能相同,但其效率可能更快。
at(n)返回容器中 n 位置处元素的引用,该函数 自动检查 n 是否在有效的范围内,如果不是则抛出 out_of_range 异常
正是由于 array 容器中包含了 at() 这样的成员函数,使得操作元素时比普通数组更安全。
front()返回容器中第一个元素的直接引用,该函数不适用于空的 array 容器。
back()返回容器中最后一个元素的直接应用,该函数同样不适用于空的 array 容器。
data()返回一个指向容器首个元素的指针。利用该指针,可实现复制容器中所有元素等类似功能。
fill(val)将 val 这个值赋值给容器中的每个元素。
array1.swap(array2)交换 array1 和 array2 容器中的所有元素,但前提是它们具有相同的长度和类型。
  • 在 <array> 头文件中还重载了 get() 全局函数 ,该重载函数的功能是访问容器中指定的元素,并返回该元素的引用。

实例

#include <iostream>
#include <array>
using namespace std;

int main()
{
    array<int, 4> values{};
    int y[] = { 3,1,4,5 };

    //初始化 values 容器
    for (int i = 0; i < values.size(); i++) {
        values.at(i) = y[i];
    }

    //使用 get() 重载函数输出指定位置元素
    cout << get<3>(values) << endl;

    //如果容器不为空,则输出容器中所有的元素
    if (!values.empty()) {
        for (auto val = values.begin(); val < values.end(); val++) {
            cout << *val << " ";
        }
    }
}

在这里插入图片描述

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要计算STL模型的体积,可以使用PHP编程语言来实现。首先,需要确保安装了PHP的STL模块(如"threed-model")。 接下来,可以按照以下步骤进行计算: 1. 读取STL文件:使用`file_get_contents`函数读取STL文件,并将其存储在一个字符串变量中。 2. 解析STL文件:将读取到的STL数据转换为数组,以便进一步处理。可以使用`explode`函数将字符串按行分解为数组元素,然后使用`trim`函数去除每行的空格。 3. 计算三角形面积:遍历STL数组,通过解析每个三角形的顶点坐标来计算其面积。可以使用海伦公式或向量叉积来计算三角形面积。 4. 计算模型体积:将所有三角形的面积相加,即可得到整个STL模型的体积。 下面是一个示例代码: ```php // 读取STL文件 $stlData = file_get_contents('path/to/stl/file.stl'); // 解析STL数据为数组 $stlArray = explode("\n", trim($stlData)); // 计算三角形面积 $triangleAreas = array(); foreach ($stlArray as $line) { if (strpos($line, 'facet normal') !== false) { // 解析顶点坐标 $vertex1 = explode(' ', trim($stlArray[$i + 2])); $vertex2 = explode(' ', trim($stlArray[$i + 3])); $vertex3 = explode(' ', trim($stlArray[$i + 4])); // 计算面积并存储 $triangleAreas[] = calculateTriangleArea($vertex1, $vertex2, $vertex3); } } // 计算模型体积 $modelVolume = array_sum($triangleAreas); // 输出结果 echo 'STL模型的体积为:' . $modelVolume . '立方单位。'; // 计算三角形面积的函数 function calculateTriangleArea($v1, $v2, $v3) { // 在这里使用合适的方法来计算三角形的面积 } ``` 以上是一个基本的框架,你需要根据实际情况来解析STL数据和计算三角形面积的方法。另外,注意STL文件的单位和坐标系,以便正确计算体积。 ### 回答2: 在PHP中计算STL模型的体积可以通过以下步骤来实现: 1. 读取STL文件:首先,需要使用PHP的文件操作函数打开STL文件,并读取其中的内容。STL文件通常是以二进制格式存储,需要使用相应的方法解析和读取其中的数据。 2. 解析STL数据:解析STL文件的数据结构,可以根据STL文件的格式进行解析。STL文件通常包含模型的三角面片(facet)信息,每个面片由三个顶点坐标和法向量组成。 3. 计算面片体积:对于每个面片,可以使用基本几何计算方法计算其面积。可以通过计算基准点到面片三个顶点的向量叉乘长度的一半来获得面片的面积。 4. 累加面片体积:遍历所有的面片,将每个面片的面积累加起来,即可得到整个模型的体积。 5. 输出结果:将计算出的模型体积进行格式化和显示,可以通过echo语句将结果输出到网页上或保存到文件中。 注意事项: - STL文件可能包含多个面片,需要将所有面片的体积累加起来才能得到整个模型的体积。 - 在进行计算时,需要注意单位的一致性,比如长度单位的一致性。有时需要将模型的坐标进行转换或缩放,以使得计算结果的单位与预期一致。 综上所述,通过解析STL文件的数据结构,遍历计算每个面片的体积,并累加得到整个模型的体积,即可在PHP中计算STL模型的体积。 ### 回答3: 在PHP中计算STL模型的体积可以按照以下步骤进行。 首先,需要解析STL文件并提取出三角面片的顶点坐标。STL文件通常包含一系列三角形面片和每个面片的法向量。 其次,计算每个三角形面片的面积。可以使用向量的叉积来计算三角形的面积。首先,计算出两个边向量,然后将边向量的叉积除以2即可得到三角形的面积。对于三维向量(u1, v1, w1)和(v2, w2, w2),其叉积计算公式为:(v1 * w2 - v2 * w1, w1 * u2 - w2 * u1, u1 * v2 - u2 * v1)。计算出每个三角形的面积后,可以将它们累加得到模型的总体积。 最后,根据模型的单位确定体积的单位。例如,如果STL文件中的三角形面片的单位是毫米,则累加的面积结果也是毫米单位的。如果需要以立方厘米为单位表示体积,可以将累加的面积乘以1/1000。 综上所述,在PHP中计算STL模型体积的过程是:解析STL文件,提取出顶点坐标,计算每个三角形面片的面积,并将结果累加得到总体积。最后,根据单位将体积转换为合适的单位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MR_Promethus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值