Найти тему
Ржавый код

Урок №2 - Векторы

Оглавление

Rust - это прекрасный язык системного программирования, который, как известно, описывается как “трудный в освоении”. В этой серии мы разберем его концепции на простые для понимания части с ключевыми выводами. Надежда этой серии состоит в том, чтобы заинтересовать больше людей rust и увидеть, насколько это удивительно на самом деле. В этой статье мы поговорим о векторах.

Векторы в Rust - это динамический массив, который может увеличиваться или уменьшаться в размерах. Они используются для хранения коллекций значений одного и того же типа. Вот как использовать их в Rust:

Создание вектора

Векторы могут быть созданы с помощью макроса `vec!`, подобно этому:

-2

Вы также можете создать пустой вектор и добавить в него элементы позже:

-3

Указание емкости

Когда вы создаете вектор, вы можете указать емкость, которая представляет собой объем пространства, которое вектор будет предварительно выделять в памяти:

-4

Указание емкости может быть полезно, когда вы знаете приблизительное количество элементов, которые вы будете хранить в векторе, поскольку это может помочь избежать ненужного перераспределения памяти.

Резервирование дополнительного пространства

Вы можете зарезервировать дополнительное пространство для вектора, используя метод `reserve`:

-5

Это увеличит емкость вектора, по крайней мере, до указанного объема, так что он сможет хранить больше элементов без необходимости перераспределять память.

Сокращение пропускной способности

Вы можете уменьшить емкость вектора, чтобы он соответствовал длине, используя метод `shrink_to_fit`:

-6

Это уменьшит емкость вектора, чтобы он соответствовал длине, освобождая любую неиспользуемую память.

Клонирование вектора

Вы можете клонировать вектор, чтобы создать точную копию:

-7

Это полезно, когда вам нужно создать копию вектора для другой цели, но сохранить исходный вектор неизменным.

Доступ к элементам

Вы можете получить доступ к элементам вектора, используя квадратные скобки и индекс, например:

-8

Обратите внимание, что доступ к индексу за пределами границ приведет к панике, поэтому рекомендуется проверить длину вектора перед доступом к элементам.

Перебор по вектору

Вы можете выполнять итерации по элементам вектора, используя цикл `for`:

-9

Вы также можете использовать метод `iter()` для получения итератора, а затем использовать такие методы, как `next()`, для получения следующего значения:

-10

Использование метода for_each

Метод for_each - это краткий способ перебора вектора и выполнения операции над каждым элементом:

-11

Модифицирование элементов

Вы можете изменять элементы вектора, используя квадратные скобки и индекс, например:

-12

Срез вектора

Вы можете получить срез элементов из вектора, разрезав его следующим образом:

-13

Это даст вам фрагмент элементов от индекса 1 до индекса 3 (не включая индекс 4).

Добавление векторов

Вы можете объединить два вектора в один, используя метод `extend`:

-14

Это даст вам единый вектор, содержащий элементы как из `v1`, так и из `v2`.

Нахождение минимального и максимального значений

Вы можете найти минимальное и максимальное значения в векторе, используя методы `min` и `max`:

-15

Эти методы возвращают `Option`, поэтому вам нужно будет использовать `unwrap`, чтобы получить фактическое значение.

Сортировка вектора

Вы можете отсортировать элементы вектора в порядке возрастания, используя метод сортировки:

-16

Это приведет к сортировке элементов на месте, что означает, что исходный вектор будет изменен.

Удаление вектора

Наконец, важно знать, как удалить вектор, когда вы закончите с ним работать. Это освободит память, которая была выделена для вектора:

-17

Функция drop забирает значение и немедленно освобождает его память, поэтому используйте ее с осторожностью. В большинстве случаев, если вектор выйдет за пределы области видимости, он автоматически удалится, поэтому вам не нужно будет явно использовать функцию drop.

Итог

Это всего лишь еще несколько примеров того, что вы можете делать с векторами в Rust. Стандартная библиотека предоставляет гораздо больше методов для работы с векторами, поэтому обязательно ознакомьтесь с документацией для получения дополнительной информации.

-18

Статья на list-site.