Читаем Rust на примерах полностью

Вектора - это массивы изменяемого размера. Их размер, как и у срезов, не известен во время компиляции, но он может в любое время расширяться. Вектора представляются при помощи 3 параметров:

   • указатель на данные

   • длина

   • вместимость

Вместимость показывает сколько памяти зарезервировано для вектора. Вектор может расти до тех пор, пока его длина меньше вместимости. Если при следующей вставке порог может быть превышен, под вектор выделяется больше памяти и данные переносятся в новый вектор.

fn main() {

// Итераторы могут быть собраны в вектора

let collected_iterator: Vec = (0..10).collect();

println!("(0..10) собраны в: {:?}", collected_iterator);

// Макрос `vec!` может быть использован для инициализации вектора

let mut xs = vec![1i32, 2, 3];

println!("Исходный вектор: {:?}", xs);

// Вставка нового элемента в конец вектора

println!("Добавим 4 в конец вектора");

xs.push(4);

println!("Вектор: {:?}", xs);

// Ошибка! Неизменяемые вектора не могут увеличиваться

collected_iterator.push(0);

// ИСПРАВЬТЕ ^ Закомментируйте эту строку

// Метод `len` отдаёт количество элементом, сохранённых в векторе

println!("Длина вектора: {}", xs.len());

// Индексация выполняется при помощи квадратных скобок (индексация начинается с 0)

println!("Второй элемент: {}", xs[1]);

// `pop` удаляет последний элемент из вектора и возвращает его

println!("Последний элемент: {:?}", xs.pop());

// Выход за пределы индексации вызывает панику

println!("Четвёртый элемент: {}", xs[3]);

// ИСПРАВЬТЕ ^ Закомментируйте эту строку

// По векторами легко итерироваться

println!("Содержимое `xs`:");

for x in xs.iter() {

println!("> {}", x);

}

// Также можно итерироваться по вектору с получением индекса элемента

// (который будет содержаться в отдельной переменной `i`)

for (i, x) in xs.iter().enumerate() {

println!("{}-ый элемент имеет значение {}", i, x);

}

// Благодаря `iter_mut`, у изменяемых векторов можно менять значения

// во время итерирования

for x in xs.iter_mut() {

*x *= 3;

}

println!("Обновлённый вектор: {:?}", xs);

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Подробную информацию о методах объекта Vec можно почитать в разделе модуля std::vec

<p id="Строки"><strong><a l:href="#Строки">Строки</a></strong></p>

В Rust есть два типа строк: String и &str.

String сохраняется как вектор байт (Vec), но с гарантией, что это всегда будет действительная UTF-8 последовательность. String выделяется в куче, расширяемая и не заканчивается нулевым байтом (не null-terminated).

Перейти на страницу:

Похожие книги

Компьютерные сети. 6-е изд.
Компьютерные сети. 6-е изд.

Перед вами шестое издание самой авторитетной книги по современным сетевым технологиям, написанное признанным экспертом Эндрю Таненбаумом в соавторстве со специалистом компании Google Дэвидом Уэзероллом и профессором Чикагского университета Ником Фимстером. Первая версия этого классического труда появилась на свет в далеком 1980 году, и с тех пор каждое издание книги неизменно становилось бестселлером. В книге последовательно изложены основные концепции, определяющие современное состояние компьютерных сетей и тенденции их развития. Авторы подробно объясняют устройство и принципы работы аппаратного и программного обеспечения, рассматривают все аспекты и уровни организации сетей — от физического до прикладного. Изложение теоретических принципов дополняется яркими, показательными примерами функционирования интернета и компьютерных сетей различного типа. Большое внимание уделяется сетевой безопасности. Шестое издание полностью переработано с учетом изменений, произошедших в сфере сетевых технологий за последние годы, и, в частности, освещает такие технологии, как DOCSIS, 4G и 5G, беспроводные сети стандарта 802.11ax, 100-гигабитные сети Ethernet, интернет вещей, современные транспортные протоколы CUBIC TCP, QUIC и BBR, программно-конфигурируемые сети и многое другое.

Дэвид Уэзеролл , Ник Фимстер , Эндрю Таненбаум

Учебные пособия, самоучители

Все жанры