VEX —— Functions|Arrays

C++编程:操作数组与字符串的实用函数
本文详细介绍了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

基于遗传算法的微电网调度(风、光、蓄电池、微型燃气轮机)(Matlab代码实现)内容概要:本文档介绍了基于遗传算法的微电网调度模型,涵盖风能、太阳能、蓄电池和微型燃气轮机等多种能源形式,并通过Matlab代码实现系统优化调度。该模型旨在解决微电网中多能源协调运行的问题,优化能源分配,降低运行成本,提高可再生能源利用率,同时考虑系统稳定性与经济性。文中详细阐述了遗传算法在求解微电网多目标优化问题中的应用,包括编码方式、适应度函数设计、约束处理及算法流程,并提供了完整的仿真代码供复现与学习。此外,文档还列举了大量相关电力系统优化案例,如负荷预测、储能配置、潮流计算等,展示了广泛的应用背景和技术支撑。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事微电网、智能电网优化研究的工程技术人员。; 使用场景及目标:①学习遗传算法在微电网调度中的具体实现方法;②掌握多能源系统建模与优化调度的技术路线;③为科研项目、毕业设计或实际工程提供可复用的代码框架与算法参考; 阅读建议:建议结合Matlab代码逐段理解算法实现细节,重点关注目标函数构建与约束条件处理,同时可参考文档中提供的其他优化案例进行拓展学习,以提升综合应用能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值