Читаем Rust by Example полностью

mem::size_of_val(&box_in_a_box));

// Copy the data contained in `boxed_point` into `unboxed_point`

let unboxed_point: Point = *boxed_point;

println!("Unboxed point occupies {} bytes on the stack",

mem::size_of_val(&unboxed_point));

}

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

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

<p id="vectors"><strong><a l:href="#vectors">Vectors</a></strong></p>

Vectors are re-sizable arrays. Like slices, their size is not known at compile time, but they can grow or shrink at any time. A vector is represented using 3 parameters:

   • pointer to the data

   • length

   • capacity

The capacity indicates how much memory is reserved for the vector. The vector can grow as long as the length is smaller than the capacity. When this threshold needs to be surpassed, the vector is reallocated with a larger capacity.

fn main() {

// Iterators can be collected into vectors

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

println!("Collected (0..10) into: {:?}", collected_iterator);

// The `vec!` macro can be used to initialize a vector

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

println!("Initial vector: {:?}", xs);

// Insert new element at the end of the vector

println!("Push 4 into the vector");

xs.push(4);

println!("Vector: {:?}", xs);

// Error! Immutable vectors can't grow

collected_iterator.push(0);

// FIXME ^ Comment out this line

// The `len` method yields the number of elements currently stored in a vector

println!("Vector length: {}", xs.len());

// Indexing is done using the square brackets (indexing starts at 0)

println!("Second element: {}", xs[1]);

// `pop` removes the last element from the vector and returns it

println!("Pop last element: {:?}", xs.pop());

// Out of bounds indexing yields a panic

println!("Fourth element: {}", xs[3]);

// FIXME ^ Comment out this line

// `Vector`s can be easily iterated over

println!("Contents of xs:");

for x in xs.iter() {

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

}

// A `Vector` can also be iterated over while the iteration

// count is enumerated in a separate variable (`i`)

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

println!("In position {} we have value {}", i, x);

}

// Thanks to `iter_mut`, mutable `Vector`s can also be iterated

// over in a way that allows modifying each value

for x in xs.iter_mut() {

*x *= 3;

}

println!("Updated vector: {:?}", xs);

}

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

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

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

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

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

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