Would something like this suffice?

```rust
fn update<I: Iterator<T>>(self, iter: I) -> uint {
    let mut i = 0;
    for (slot, element) in self.mut_iter().zip(iter) {
        *slot = element;
        i += 1;
    }
    return i;
}
```

If the `unsafe` blocks stays, could you add a comment explaining why it is unsafe, what the benefits are, and why it is necessary to not rely on safe code?