// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9; library Array {
function push(uint256[] memory _nums, uint256 _num) internal pure {
assembly {
mstore(add(_nums, mul(add(mload(_nums), 1), 0x20)), _num)
mstore(_nums, add(mload(_nums), 1))
// 0x40 是空闲内存指针的预定义位置 (value 为 空闲指针开始位)
mstore(0x40, add(mload(0x40), 0x20))
}
} function pop(uint256[] memory _nums) internal pure returns (uint256 num_) {
assembly {
num_ := mload(add(_nums, mul(mload(_nums), 0x20)))
mstore(_nums, sub(mload(_nums), 1))
}
} function del(uint256[] memory _nums, uint256 _index) internal pure {
assembly {
if lt(_index, mload(_nums)) {
mstore(
add(_nums, mul(add(_index, 1), 0x20)),
mload(add(_nums, mul(mload(_nums), 0x20)))
)
mstore(_nums, sub(mload(_nums), 1))
}
}
} function update(
uint256[] memory _nums,
uint256 _index,
uint256 _num
) internal pure {
_nums[_index] = _num;
} function get(uint256[] memory _nums, uint256 _index)
internal
pure
returns (uint256)
{
return _nums[_index];
}
} contract testArr {
using Array for uint256[]; function push(uint256[] memory _nums, uint256 num)
external
pure
returns (uint256[] memory)
{
_nums.push(num);
return _nums;
} function pop(uint256[] memory _nums)
external
pure
returns (uint256[] memory, uint256)
{
uint256 num_ = _nums.pop();
return (_nums, num_);
} function del(uint256[] memory _nums, uint256 _index)
external
pure
returns (uint256[] memory)
{
_nums.del(_index);
return _nums;
} function update(
uint256[] memory _nums,
uint256 _index,
uint256 _num
) external pure returns (uint256[] memory) {
_nums.update(_index, _num);
return _nums;
} function get(uint256[] memory _nums, uint256 _index)
external
pure
returns (uint256)
{
return _nums.get(_index);
}
}

solidity 内存(memory) 可变数组的增删改查 操作的更多相关文章

  1. Arrays(二),对封装的数组进行增删改查操作

    (一)添加元素 对任意位置添加元素 /** * 向数组中添加元素 * @param e 元素e * @param index 插入元素的在数组中的位置 * @return 添加结果 */ public ...

  2. Shell数组的增删改查

    Shell数组的增删改查 shell数组的定义及取值: a=(1 2 3) [root@bogon tmp]# echo ${a[*]}  1 2 3 [root@bogon tmp]# echo $ ...

  3. (转)SQLite数据库增删改查操作

    原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数 ...

  4. PHP程序中使用PDO对象实现对数据库的增删改查操作的示例代码

    PHP程序中使用PDO对象实现对数据库的增删改查操作(PHP+smarty) dbconn.php <?php //------------------------使用PDO方式连接数据库文件- ...

  5. Android SQLite 数据库 增删改查操作

    Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...

  6. python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)

    一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...

  7. MySQL数据库的权限问题操作及基本增删改查操作

    前面我们讲了mysql的基本内容,现在我们详细的了解一下mysql中的具体操作. what's the SQl SQL(Structured Query Language 即结构化查询语言) SQL语 ...

  8. DataSet之增删改查操作(DataGridView绑定)

    DataSet数据集,数据缓存在客户端内存中,支持断开式连接.DataGridView控件绑定DataSet时,它自动的改变的DS的行的状态,而且在做增删改查的时候,可以借助SqlCommandBui ...

  9. 后盾网lavarel视频项目---lavarel使用模型进行增删改查操作

    后盾网lavarel视频项目---lavarel使用模型进行增删改查操作 一.总结 一句话总结: 使用模型操作常用方法 查一条:$model=Tag::find($id); 删一条:Tag::dest ...

  10. SQLAlchemy02 /SQLAlchemy对数据的增删改查操作、属性常用数据类型详解

    SQLAlchemy02 /SQLAlchemy对数据的增删改查操作.属性常用数据类型详解 目录 SQLAlchemy02 /SQLAlchemy对数据的增删改查操作.属性常用数据类型详解 1.用se ...

随机推荐

  1. 原生JavaScript

    原生JavaScript 为了方便查看. 所有的js和css代码都是嵌入式直接写在html代码中 1.js的引入方式 <!DOCTYPE html> <html lang=" ...

  2. 快速上手Spring项目

    通过maven依赖管理导入所需Jar包 注 : spring 需要导入commons-logging进行日志记录 . 我们利用maven , 他会自动下载对应的依赖项 . <dependency ...

  3. python和C语言从路径中获取文件名

    1.Python import os file_name = os.path.basename(filepath)#带后缀的文件名(不含路径) file_name_NoExtension = os.p ...

  4. HDFS基础学习

    HDFS简介 HDFS即Hadoop Distributed File System,是一个分布式文件系统,用于存储海量数据.一个HDFS集群由一个NameNode和多个DataNode组成. HDF ...

  5. 《HelloGitHub》第 79 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...

  6. C# Static关键词的使用

    一.C#中类的方法分为静态方法和非静态方法 静态方法有Static关键词修饰 静态方法归类所有,而非静态方法归类的实例所有:静态方法无需类去实例化可直接调用 静态成员属于类所有,为各个类的实例所公用, ...

  7. fastjson反序列化漏洞历史CVE学习整理

    fastjson 1.2.24反序列化漏洞复现 先写一个正常的使用 fastjson的web服务 我们使用 springboot创建 主要是pom.xml 里面要添加fastjson fastjson ...

  8. letcode-学习-数组去重

    数组去重 问题描述: 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度.元素的 相对顺序 应该保持 一致 . 由于在某些语言中不 ...

  9. Day04:Java数据类型

    Java的数据类型 强类型语言 要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用 弱类型语言 什么是变量 变量:可以变化的量. 在Java中每个变量都必须先申明这个变量是什么类型 Stri ...

  10. 《吐血整理》高级系列教程-吃透Fiddler抓包教程(33)-Fiddler如何抓取WebSocket数据包

    1.简介 本来打算再写一篇这个系列的文章也要和小伙伴或者童鞋们说再见了,可是有人留言问WebSocket包和小程序的包不会抓,那就关于这两个知识点宏哥就再水两篇文章. 2.什么是Socket? 在计算 ...