小编Pil*_*kio的帖子

Rust 指定局部变量的生命周期

我对 Rust 很陌生,并且仍然对生命周期说明符的概念有疑问。

我有一个Vec(或任何其他集合)参考文献。现在我想用对新创建的局部变量的另一个引用替换特定引用。现在的问题是,局部新变量的生命周期比向量短,这会使引用无效。

尝试执行我想要的操作但抛出编译时错误的示例代码:

fn main() {
    let values = ["one".to_string(), "lorem".to_string(), "three".to_string()];
    let borrowed_values = vec![&values[0], &values[1], &values[2]];
    println!("{:?}", do_the_impossible(borrowed_values));
}

fn do_the_impossible(mut data: Vec<&String>) -> Vec<&String> {
    let replacement = "two".to_string();
    data[1] = &replacement;
    return data;
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是:如何创建一个与向量具有相同生命周期的新变量?

我想使用引用,因为克隆对象会非常昂贵。

我最初的想法是使用生命周期说明符,它表明局部变量应该与向量一样长。但我找不到语法上正确的方法来做到这一点。是否可以指定局部变量的生命周期?

如果没有,是否有其他方法可以避免克隆载体的元素?我最后的手段是使用Rc指针。

提前致谢!

lifetime rust

5
推荐指数
1
解决办法
1380
查看次数

使用每组的一个数字查找多组中的数字总和

背景

嗨,我正在尝试解决编程问题,但遇到以下问题:

假设您有多个数字列表。全部按降序排列。您现在必须从每个列表中取一个数字来获得最大可能的总和。

到目前为止很容易,要解决这个问题,您只需取每个列表的第一个数字即可。

但是现在,我需要第二大和,同时仍然使用每个列表中的一个数字。为了实现这一点,我将采用每个列表中的第一个元素,但对于第一个和第二个数字之间差异最小的列表,将使用第二个数字。

这还是很可行的。

问题

但是我需要一个 Iterator 对每个可能的总和使用按降序排序的每个列表的一个数字。
出于性能原因,不可能只计算每个总和然后对其进行排序。该算法必须已经按降序提供总和。如果总和有多种组合,则必须多次返回总和。

其他要求

Iterator 应该是惰性的(仅在需要时计算下一个总和)。
列表已经是惰性的,这意味着您应该需要尽可能少的值来计算拟合总和。

例子

对于列表:

List 1: [5, 2, 1]
List 2: [10, 2]
List 3: [6, 1]
Run Code Online (Sandbox Code Playgroud)

然后迭代器应该返回:

[5, 10, 6] = 21
[2, 10, 6] = 18
[1, 10, 6] = 17
[5, 10, 1] = 16
[5,  2, 6] = 13
[2, 10, 1] = 13
[1, 10, 1] = 12
[2,  2, 6] = 10
[1,  2, 6] = 9
[5,  2, 1] = …
Run Code Online (Sandbox Code Playgroud)

algorithm math iterator list lazy-evaluation

5
推荐指数
1
解决办法
88
查看次数

Java ECC 编码密钥太大

我是 EC 加密的新手,并且遇到了一些困难。我正在使用 Java 8 和 BouncyCatle 提供程序。我现在的问题是:当我使用以下代码生成 EC-KeyPair 时:

    ECGenParameterSpec spec = new ECGenParameterSpec("secp521r1");
    KeyPairGenerator kpg = KeyPairGenerator.getInstance("ECDH", BouncyCastleProvider.PROVIDER_NAME);
    kpg.initialize(spec, new SecureRandom());
    return kpg.generateKeyPair();
Run Code Online (Sandbox Code Playgroud)

并尝试获取公钥的字节数组并将其发送给另一个人,编码后的密钥长度为 158 字节,采用 X.509 格式。但我期望 X9.62 格式和 65 到 66 字节之间的密钥大小。为什么公钥这么大以及如何使用预期的密钥大小对其进行编码?(我预计密钥大小是因为我预计密钥长度为 521 位)

java cryptography bouncycastle ecdsa

2
推荐指数
1
解决办法
2472
查看次数