首页 > 其他分享 >rust交换数组中的两个元素

rust交换数组中的两个元素

时间:2024-09-28 13:46:50浏览次数:1  
标签:mut self 元素 let swap 数组 rust

不可以直接用std::mem::swap,因为这个函数需要拿两个可变引用,但是不可以同时拿两个这个数组的可变引用。

所以要么手写:

let tmp = a[i];
a[i] = a[j];
a[j] = tmp;

要么用Vec::swap

a.swap(i, j);

其内部实现:

fn swap(&mut self, a: usize, b: usize) {
    unsafe {
        // Can't take two mutable loans from one vector, so instead just cast
        // them to their raw pointers to do the swap
        let pa: *mut T = &mut self[a];
        let pb: *mut T = &mut self[b];
        ptr::swap(pa, pb);
    }
}

原文:https://stackoverflow.com/questions/25531963/how-can-i-swap-items-in-a-vector-slice-or-array-in-rust/25532111

标签:mut,self,元素,let,swap,数组,rust
From: https://www.cnblogs.com/searchstar/p/18437577

相关文章

  • rust二分搜索
    如果要二分搜索某个特定值,可以用binary_search:https://doc.rust-lang.org/stable/std/primitive.slice.html#method.binary_search如果要实现C++里的lower_bound和upper_bound类似的功能,可以用partition_point:https://doc.rust-lang.org/stable/std/primitive.slice.html#meth......
  • Rust索引String
    Rust的String里其实是UTF-8编码的,而UTF-8是变长编码,因此会导致Rust索引String时,可能是索引第k个UTF-8字符(需要遍历字符串),也可能是索引第k个字节。因此,Rust不支持直接用下标来索引String。如果要找到第k个UTF-8字符:s.chars().nth(k)如果要找到第k个字节:letx:u8=s.as_bytes......
  • 二维数组的创建和初始化
    1.二维数组的概念按我的理解,其实二数组就是有多个一维数组组成的,多个二维数组作为元素,那就是三维数组,多个三维数组就是多维数组。2.二维数组的创建1.type arr_name[常量值1 ][常量值2 ]={};2.例如:3.intarr[3][6];4.doubledata[4][6];1.type代表类型2.arr表示数......
  • 代码随想录算法训练营第二天| 209.长度最小的子数组、59.螺旋矩阵II 、区间和、开发
    209.长度最小的子数组此题注重理解,同时我将res一开始初始化为sums的长度加一(因为不可能为此长度)INT32_MAX是一个常量,代表32位有符号整数的最大值classSolution{public:intminSubArrayLen(inttarget,vector<int>&nums){inti=0,j=0;//i为起始位置,j为......
  • C++字符串与字符数组
    在C++中,字符串和字符数组是紧密相关的概念,但它们之间也存在一些关键的区别。理解这些区别对于编写高效、安全的C++代码非常重要。字符数组字符数组是C++中用于存储字符序列的基础数据结构。它本质上是一个元素类型为char的数组,可以在声明时初始化,也可以在运行时通过赋值或函......
  • 数组
    文章目录数组的概念⼀维数组的创建和初始化数组创建数组的初始化数组的类型⼀维数组的使用·数组下标数组元素的打印数组的输入⼀维数组在内存中的存储sizeof计算数组元素个数⼆维数组的创建⼆维数组的概念⼆维数组的创建⼆维数组的初始化不完全初始化完全初始化按照......
  • Leetcode 154. 寻找旋转排序数组中的最小值 II
    1.题目基本信息1.1.题目描述已知一个长度为n的数组,预先按照升序排列,经由1到n次旋转后,得到输入数组。例如,原数组nums=[0,1,4,4,5,6,7]在变化后可能得到:若旋转4次,则可以得到[4,5,6,7,0,1,4]若旋转7次,则可以得到[0,1,4,4,5,6,7]注意,数组[a[0],a[1],a[2],......
  • 面试经典 150 题:力扣88. 合并两个有序数组
    每周一道算法题启动题目【题目链接】【解法一】合并后排序排序后的数组自动省略0的数字,又学到了classSolution{public:voidmerge(vector<int>&nums1,intm,vector<int>&nums2,intn){//合并两个数组后排序for(inti=0;i<n;i++)......
  • Java 数组
    目录1基本概念2数组的定义 2.1声明数组2.2初始化数组2.2.1动态初始化 2.2.2静态初始化3数组常用方法3.1获取数组长度3.2数组排序3.3数组复制3.4数组填充3.5数组转换为字符串3.6数组比较3.7 查找数组中的元素3.8数组转列表4多维数组4.1二维......
  • C语言中的一维数组
    引言一维数组是C语言中用于存储多个相同类型数据的基本数据结构。本文将详细介绍一维数组的定义、初始化、元素操作、作为参数传递的方式,以及实际应用示例。1.一维数组的定义1.1定义方式一维数组是由一系列相同类型的数据元素构成的线性集合。定义一维数组的基本语法......