我在Rust中做了一个Leetcode问题,遇到了以下错误:

fn plus_one(digits: &mut Vec<u32>) -> &Vec<u32> {
    for i in (0.. digits.len()).rev() {
        if digits[i] < 10 {
            digits[i] = digits[i] + 1;
            break;
        }else{
            digits[i] = 0;
        }
    }

    if(digits[0] == 0) {
        let mut new_digits : Vec<u32> = vec![1];
        new_digits.extend(digits).        // This is the error
    }

    digits
}

GET错误:

--> src/easy/plus_one.rs:13:20
   |
13 |         new_digits.extend(digits)
   |                    ^^^^^^ the trait `Extend<&mut u32>` is not implemented for `Vec<u32>`
   |
   = help: the following other types implement trait `Extend<A>`:
             <Vec<T, A> as Extend<T>>
             <Vec<T, A> as Extend<&'a T>>

问题出在哪里?我该如何解决这个问题?

推荐答案

&mut Vec<u32>的迭代器产生&mut u32.Vec不能从那里扩展(但它可以从迭代器扩展到&u32).

最简单的解决方法是使用extend_from_slice():

fn plus_one(digits: &mut Vec<u32>) -> &Vec<u32> {
    for i in (0..digits.len()).rev() {
        if digits[i] < 10 {
            digits[i] = digits[i] + 1;
            break;
        } else {
            digits[i] = 0;
        }
    }

    if digits[0] == 0 {
        let mut new_digits: Vec<u32> = vec![1];
        new_digits.extend_from_slice(digits);
    }

    digits
}

Rust相关问答推荐

空字符串转换为Box字符串时是否分配?<>

关于Rust 中回归的逻辑

我如何在Rust中使用传递依赖中的特征?

获取字符串切片(&;str)上的切片([ia..ib])返回字符串

在决定使用std::Sync::Mutex还是使用Tokio::Sync::Mutex时,操作系统线程调度是考虑因素吗?

Pin<;&;mut可能将Uninit<;T>;>;合并为Pin<;&;mut T>;

如何正确重新排列代码以绕过铁 rust 借入判断器?

我应该将哪些文件放入我的GitHub存储库

在macro_rule中拆分模块和函数名

在复制类型中使用std::ptr::WRITE_VILAR进行内部可变性的安全性(即没有UnSafeCell)

为什么HashMap::get和HashMap::entry使用不同类型的密钥?

可以在旋转循环中调用try_recv()吗?

OpenGL 如何同时渲染无纹理的四边形和有纹理的四边形

Rust与_有何区别?

max(ctz(x), ctz(y)) 有更快的算法吗?

匹配结果时的简洁日志(log)记录

有没有更好的方法来为拥有 DIsplay 事物集合的 struct 实现 Display?

为什么这个闭包没有比 var 长寿?

Rust 内联 asm 中的向量寄存器:不能将 `Simd` 类型的值用于内联汇编

如何阅读 HttpRequest 主体