Есть моменты, когда вы хотите выделить данные, не зная заранее, сколько данных вам нужно.Идиоматический способ заполнения произвольного размера вектора без изменения размера массива?
В основном векторы в порядке, но есть моменты, когда более эффективно выделять цепочку блоков памяти, создавая при необходимости новые куски.
Если вам не нужно обращаться к ним напрямую по индексу (например, только по последнему элементу), они могут храниться как фрагменты памяти. В противном случае после этого будет выделен вектор фиксированного размера и данные будут скопированы в него.
Хотя это может быть сделано в Rust с LinkedList
от Vec
, есть ли более идиоматический способ выполнения этой задачи?
'(Vec> Vec )', вероятно, лучше, чем 'Vec >', так как мало смысла иметь емкость для всех внутренних распределений, и имеющий последний 'Vec' инлайн будет сделать быстрее PUSH/хлопков. Но это самое незначительное. –
Veedrac
@ Veedrac: большая разница между 'Vec' и 'Box <[T]>' заключается в том, что в последнем вам нужно * точное число элементов, тогда как вы можете вырастить 'Vec ', как вам нужно, пока не получите его "max «количество элементов (но сначала резервируйте, чтобы избежать перераспределения). –
Вот почему это '(Vec>, Vec )', а не только 'Vec >'. Вы не хотите изменять размер значений в середине, так как все они заполнены. –
Veedrac