Почему в Rust нет аналога Vec::with_capacity() такого как Vec::with_len()
Я знаю что можно написать так:
let v = Vec::with_capacity(n);
unsafe { v.set_len(n); }
Но почему в Rust нет возможности создать вектор данной длины не заполняя его (что не логично по производительности) или не прибегая к unsafe ?
Ответы (1 шт):
Насколько я понял из исходников - Vec::with_capacity как раз ничего не заполняет, а по описанию, делает именно то, о чем вы пишете - создает вектор заданной длины без заполнения. Естественно, при этом Rust защищает вас от доступа к мусорным значениям через length равным 0 (см Capacity and reallocation).
Все это сделано как раз для случаев когда вам нужна производительность - после вызова Vec::with_capacity vec.push не будет делать реалокацию. В идеале, при правильном переданном значении в Vec::with_capacity и дальнейшем заполнении массива значениями в цикле, у вас не будет ни одной реалокации массива и присваивание значения будет только один раз.