VEX —— Functions|Arrays

本文详细介绍了C++中一系列与数组和字符串操作相关的函数,包括创建、长度检查、索引管理、元素追加、移除、排序、切片以及循环遍历等,有助于理解并高效处理数据结构。

目录

array —— 高效创建数组

len —— 返回数组等长度

isvalidindex —— 检测指定的索引在数组或字符串中是否有效

append —— 追加元素到数组或字符串

push —— 添加元素到数组

upush —— 添加统一值到数组

pop —— 移除数组最后一个元素并返回

insert —— 插入元素、数组、字符串

removeindex —— 移除指定位置的元素

removevalue —— 移除指定元素

sort —— 返回升序后的数组

argsort —— 返回数组排序后的索引

reorder —— 重新排序数组或字符串

resize —— 重置数组长度

reverse —— 返回反转数组和字符串

slice —— 对数组或字符串进行切片

foreach —— 循环数组内的元素


array —— 高效创建数组

  • 应使用函数样式,来确保数组成员正确;
<type>[] array(...)
//结果为{{1,1,1}, {1,2,3}, {3,3,3}}
vector v[] = vector[](array(1, {1,2,3}, 3));
//结果为{1, 1, 3}
float v[] = float[](array(1, {1,2,3}, 3));

len —— 返回数组等长度

int  len(<vector>v)
int  len(<matrix>m)
int  len(<type>array[])
int  len(string s)
int  len(dict d)
  • length函数是计算vector大小;

isvalidindex —— 检测指定的索引在数组或字符串中是否有效

//在数组或字符串范围内返回1,否则返回0;
//index < len(array) && index >= -len(array)
int isvalidindex(<type>&array[], int index)
int isvalidindex(string str, int index)
//如key在字典内返回1,否则返回0
int isvalidindex(dict d, string key)

append —— 追加元素到数组或字符串

  • 可使用arr[n] = x形式,单独追加;
//字符串追加
void append(string &array, string value)
//数组追加,等价于 push(array, value)
void append(<type>&array[], <type>value)
//追加(或连接)数组,等价于 push(array, values)
void append(<type>&array[], <type>values[])

string s = "abcd";
append(s, 'efg');
int arr[] = {0,1,2};
append(arr, 3);

push —— 添加元素到数组

  • 可使用arr[n] = x形式,单独追加;
//等价于 append(array, value)
void push(<type>&array[], <type>value)
//等价于 append(array, values)
void push(<type>&array[], <type>values[])

upush —— 添加统一值到数组

  • 非常专业的函数,主要用于在PBR lighting中的灯光输出;
//对所有SIMD程序
void upush(<type>&array[], <type>value)

pop —— 移除数组最后一个元素并返回

//移除最后一个元素
<type> pop(<type>&array[])
//移除指定元素
<type> pop(<type>&array[], int index)

insert —— 插入元素、数组、字符串

//插入字符串,如索引大于长度则追加末尾
void insert(string &str, int index, string value)
//插入数组
//如索引超过长度则使用0或空
//如索引为负值,从数组末尾开始,大于长度则截止到0
void insert(<type>&array[], int index, <type>value)
void insert(<type>&array[], int index, <type>values[])
//复制srcdict[srckey]值到dstdict[dstkey]
//如srcdict内不存在srckey,则将从dstdict内移除
//key存在返回1,否则返回0
int insert(dict &dstdict, string dstkey, dict srcdict, string srckey)
//将srcdict合并到dstdict,相同的key将覆盖
void insert(dict &dstdict, dict srcdict)

removeindex —— 移除指定位置的元素

//移除指定位置元素并返回其值
//等价于pop(array, index)
<type> removeindex(<type>&array[], int index)
//移除字典entry,无entry返回0,否则返回1
int removeindex(dict &dictionary, string index)

removevalue —— 移除指定元素

//移除首个匹配的元素,移除返回1,否则返回0
int removevalue(<type>&array[], <type>value)
float nums[] = {0, 1, 2, 3, 1, 2, 3};
removevalue(nums; 2);  // == 1
// nums == {0, 1, 3, 1, 2, 3}

sort —— 返回升序后的数组

int [] sort(int values[])
float [] sort(float values[])
string [] sort(string values[])

argsort —— 返回数组排序后的索引

  • 可根据元素的特性,来排序数组,而不是数组本身;
  • argsort、sort使用一个稳定排序;
  • 使用reverse反转排序;
int[] argsort(<type>value[])
//通常元素长度,排序字符串
cvex main()
{
    // Given an array of strings...
    string colors[] = {"Red", "Green", "Blue", "Orange", "Violet", "Indigo"};

    // Create an array with the corresponding lengths
    int[] lengths = {};
    foreach (string name; colors) {
        push(lengths, len(name));
    }

    // Sort the lengths and return an array containing the new ordering
    int[] ordering = argsort(lengths);

    // Get the array of color names but sorted by name length
    string colors_by_len[] = reorder(colors, ordering);

    printf("%s\n", colors_by_len);
}

reorder —— 重新排序数组或字符串

  • 通常使用argsort函数生成的索引列表;
  • 负值索引,从数组末尾读取;
  • 数组或字符串长度与索引数组相同;
  • 超出边界的值将插入零,应该被认为是错误;
//UTF-8字符串
string reorder(string value, int indices[])
//数组
<type>[] reorder(<type>values[], int indices[])

resize —— 重置数组长度

//调整尺寸,如大于当前长度则使用0或空
void resize(<type>&array[], int size)
//调整尺寸,如大于当前长度则使用指定的val
void resize(<type>&array[], int size, <type>val)

reverse —— 返回反转数组和字符串

//返回反转UTF-8字符串,与str[::-1](表示从开头到结尾步幅为-1);
string reverse(string str)
//返回反转的数组
<type>[] reverse(<type>values[])

slice —— 对数组或字符串进行切片

  • 等价于value[start:end:step]
  • 如果start或end是负值,从数组或字符串末尾开始;
  • 计算的范围被钳制在原始数组或字符串的边界;
  • 如step为o,将返回空数组或字符串;
  • 如step为负值,将方向返回,end应小于start;
//提取子字符串
string slice(string s, int start, int end)
string slice(string s, int start, int end, int step)
//提取子数组
<type>[] slice(<type>s[], int start, int end)
<type>[] slice(<type>s[], int start, int end, int step)
//通用规则
string slice(string s, int hasstart, int start, int hasend, int end, int hasstep, int step)
<type>[] slice(<type>array[], int hasstart, int start, int hasend, int end, int hasstep, int step)
int nums[] = {10, 20, 30, 40, 50, 60};
slice(nums, 1, 3) == {20, 30} // nums[1:3]
slice(nums, 1, -1) == {20, 30, 40, 50} // nums[1:-1]
slice(nums, 0, 6, 2) == {10, 30, 50} // nums[0:6:2]
slice(nums, 0, 0, 0, 0, 1, 2) == {10, 30, 50} // nums[::2]

foreach —— 循环数组内的元素

//针对array中的每个成员value,计算语句;
//可选index,为每次计算的当前位置;
foreach(value; array) statement
foreach(index; value; array) statement

本项目采用C++编程语言结合ROS框架构建了完整的双机械臂控制系统,实现了Gazebo仿真环境下的协同运动模拟,并完成了两台实体UR10工业机器人的联动控制。该毕业设计在答辩环节获得98分的优异成绩,所有程序代码均通过系统性调试验证,保证可直接部署运行。 系统架构包含三个核心模块:基于ROS通信架构的双臂协调控制器、Gazebo物理引擎下的动力学仿真环境、以及真实UR10机器人的硬件接口层。在仿真验证阶段,开发了双臂碰撞检测算法和轨迹规划模块,通过ROS控制包实现了末端执行器的同步轨迹跟踪。硬件集成方面,建立了基于TCP/IP协议的实时通信链路,解决了双机数据同步和运动指令分发等关键技术问题。 本资源适用于自动化、机械电子、人工智能等专业方向的课程实践,可作为高年级课程设计、毕业课题的重要参考案例。系统采用模块化设计理念,控制核心与硬件接口分离架构便于功能扩展,具备工程实践能力的学习者可在现有框架基础上进行二次开发,例如集成视觉感知模块或优化运动规划算法。 项目文档详细记录了环境配置流程、参数调试方法和实验验证数据,特别说明了双机协同作业时的时序同步解决方案。所有功能模块均提供完整的API接口说明,便于使用者快速理解系统架构并进行定制化修改。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)内容概要:本文围绕基于非支配排序的蜣螂优化算法(NSDBO)在微电网多目标优化调度中的应用展开研究,提出了一种改进的智能优化算法以解决微电网系统中经济性、环保性和能源效率等多重目标之间的权衡问题。通过引入非支配排序机制,NSDBO能够有效处理多目标优化中的帕累托前沿搜索,提升解的多样性和收敛性,并结合Matlab代码实现仿真验证,展示了该算法在微电网调度中的优越性能和实际可行性。研究涵盖了微电网典型结构建模、目标函数构建及约束条件处理,实现了对风、光、储能及传统机组的协同优化调度。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事微电网、智能优化算法应用的工程技术人员;熟悉优化算法与能源系统调度的高年级本科生亦可参考。; 使用场景及目标:①应用于微电网多目标优化调度问题的研究与仿真,如成本最小化、碳排放最低与供电可靠性最高之间的平衡;②为新型智能优化算法(如蜣螂优化算法及其改进版本)的设计与验证提供实践案例,推动其在能源系统中的推广应用;③服务于学术论文复现、课题研究或毕业设计中的算法对比与性能测试。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注NSDBO算法的核心实现步骤与微电网模型的构建逻辑,同时可对比其他多目标算法(如NSGA-II、MOPSO)以深入理解其优势与局限,进一步开展算法改进或应用场景拓展。
内容概要:本文详细介绍了使用ENVI与SARscape软件进行DInSAR(差分干涉合成孔径雷达)技术处理的完整流程,涵盖从数据导入、预处理、干涉图生成、相位滤波与相干性分析、相位解缠、轨道精炼与重去平,到最终相位转形变及结果可视化在内的全部关键步骤。文中以Sentinel-1数据为例,系统阐述了各环节的操作方法与参数设置,特别强调了DEM的获取与处理、基线估算、自适应滤波算法选择、解缠算法优化及轨道精炼中GCP点的应用,确保最终获得高精度的地表形变信息。同时提供了常见问题的解决方案与实用技巧,增强了流程的可操作性和可靠性。; 适合人群:具备遥感与GIS基础知识,熟悉ENVI/SARscape软件操作,从事地质灾害监测、地表形变分析等相关领域的科研人员与技术人员;适合研究生及以上学历或具有相关项目经验的专业人员; 使用场景及目标:①掌握DInSAR技术全流程处理方法,用于地表沉降、地震形变、滑坡等地质灾害监测;②提升对InSAR数据处理中关键技术环节(如相位解缠、轨道精炼)的理解与实操能力;③实现高精度形变图的生成与Google Earth可视化表达; 阅读建议:建议结合实际数据边学边练,重点关注各步骤间的逻辑衔接与参数设置依据,遇到DEM下载失败等问题时可参照文中提供的多种替代方案(如手动下载SRTM切片),并对关键结果(如相干性图、解缠图)进行质量检查以确保处理精度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值