Форум программистов, компьютерный форум, киберфорум
Rust
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.70/43: Рейтинг темы: голосов - 43, средняя оценка - 4.70
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9

Можно ли создать неинициализированный массив? Кроме как let arr: [Option<u8>; 3] = [None; 3];

27.06.2020, 13:03. Показов 9239. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Пример на Си:
C
1
2
3
4
5
int main() {
    uint8_t arr[3];
    arr[0] = 42;
    printf("%d\n", arr[0]);
}
Создаётся неинициализованный массив, записывается одно значение и выводится.

Попробовал сделать подобное на расте без инициализации массива:
Code
1
2
3
4
5
fn main() {
    let mut arr: [Option<u8>; 3] = [None; 3];
    arr[0] = Some(42);
    println!("{}", arr[0]);
}
Что-то слишком сложно получилось и не работает. Может, не заморачиваться и всегда инициализировать массивы? let mut arr: [u8; 3] = [0; 3]; А если в массиве будет миллион элементов? Будет бессмысленно инициализировать их все нулём, если дальше по коду в массив буду гарантированно записаны данные. Даже питоновский numpy позволяется создавать неинициалидованные массивы: https://numpy.org/doc/stable/r... empty.html
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.06.2020, 13:03
Ответы с готовыми решениями:

Напишите функцию filterRange(arr, a, b), которая принимает массив arr, ищет в нём элементы между a и b
Здравствуйте! Всех с прошедшими праздниками! Сегодня, пишу с целью задать несколько вопросов. У меня есть задачка: ...

[Visual c++] Можно ли как то создать форму в студии, кроме clr проекта?
Добрый день форумчане. Вопрос следующий, я хочу создать приложение на c++ в VisualStudio 2017, читал форум, нашел статьи где...

Проблемы с методом массива (Array.prototype.p=1 var arr=new Array(); arr.watch('p',alertme) arr.p=2)
Опять я с подобной проблемой. &lt;script language='JavaScript1.2'&gt; function alertme(id,oldValue,newValue){ alert('arr.'+id+' =...

35
Модератор
 Аватар для Curry
5160 / 3505 / 536
Регистрация: 01.06.2013
Сообщений: 7,610
Записей в блоге: 9
21.10.2020, 19:41
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от sodda Посмотреть сообщение
а у меня документировано.
Дайте ссылку на документацию по rust где написано что память под вектор всегда увеличивается в 2 раза.
Цитата Сообщение от sodda Посмотреть сообщение
соглашаешься
Не соглашаюсь. Я дал ссылку на исходник.
0
Заблокирован
21.10.2020, 23:21
Цитата Сообщение от Curry Посмотреть сообщение
Дайте ссылку на документацию по rust где написано что память под вектор всегда увеличивается в 2 раза.
Blandy J., Orendorff J. - Programming Rust
Хорошая книга. Рекомендую.
0
Модератор
 Аватар для Curry
5160 / 3505 / 536
Регистрация: 01.06.2013
Сообщений: 7,610
Записей в блоге: 9
21.10.2020, 23:26
Цитата Сообщение от sodda Посмотреть сообщение
Blandy J., Orendorff J. - Programming Rust
Там не написано что память под вектор всегда увеличивается в 2 раза.
0
Заблокирован
21.10.2020, 23:26
Цитата Сообщение от Curry Посмотреть сообщение
Там не написано что память под вектор всегда увеличивается в 2 раза.
Написано.
0
Модератор
 Аватар для Curry
5160 / 3505 / 536
Регистрация: 01.06.2013
Сообщений: 7,610
Записей в блоге: 9
21.10.2020, 23:27
Цитата Сообщение от sodda Посмотреть сообщение
Написано.
Где конкретно?
0
Заблокирован
21.10.2020, 23:31
Цитата Сообщение от Curry Посмотреть сообщение
Где конкретно?
Думаешь я помню?
0
Модератор
 Аватар для Curry
5160 / 3505 / 536
Регистрация: 01.06.2013
Сообщений: 7,610
Записей в блоге: 9
21.10.2020, 23:43
Цитата Сообщение от sodda Посмотреть сообщение
у меня документировано.
Где? Дайте ссылку.
0
Заблокирован
21.10.2020, 23:46
Цитата Сообщение от Curry Посмотреть сообщение
Где? Дайте ссылку.
Выше смотрите
0
Модератор
 Аватар для Curry
5160 / 3505 / 536
Регистрация: 01.06.2013
Сообщений: 7,610
Записей в блоге: 9
21.10.2020, 23:59
Цитата Сообщение от sodda Посмотреть сообщение
Выше смотрите
Это не пруф.
Я написал
Цитата Сообщение от Curry Посмотреть сообщение
Что именно в 2 раза, это не документировано
Вы
Цитата Сообщение от sodda Посмотреть сообщение
а у меня документировано.
Где?
Учебник это не документация. И там такого не написано.
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
22.10.2020, 08:42
Цитата Сообщение от sodda Посмотреть сообщение
вот это зачем?
сам же ответил
Цитата Сообщение от sodda Посмотреть сообщение
Если вы решились на это разместив код в блоке unsafe, то вам предупреждают, что вы делаете это на свой страх и риск. Unsafe для этого и создан.
Цитата Сообщение от sodda Посмотреть сообщение
Если вы добавите 513 элемент в вектор
А нахрена ты создавал массив на 512 элементов если это мало?

Цитата Сообщение от sodda Посмотреть сообщение
Потом идет совершенно ненужная штука - set_len(), которая непонятно что делает.
Тут тебе понятия подправить надо. Что делает и зачем нужен приведённый код всем понятно кроме тебя.

Curry, человек сравнивает тёплое с мягким, о чём спор вообще? Ему надо изучать законы логики а не Rust.
0
22.10.2020, 08:52

Не по теме:

Цитата Сообщение от outoftime Посмотреть сообщение
Ему надо изучать законы логики а не Rust.
Ему хочется спорить. В "непризнанных гипотезах" он "доказывал" что земля плоская. Сам он в это не верит. И в данном случае, возможно, уже всё понял но ... осень.

0
Заблокирован
22.10.2020, 12:22
Цитата Сообщение от outoftime Посмотреть сообщение
Тут тебе понятия подправить надо. Что делает и зачем нужен приведённый код всем понятно кроме тебя.
Ты за всех не отвечай давай. Лучше расскажи зачем ты сначала создаешь вектор емкостью N, а потом длину устанавливаешь тоже размера N. Чтобы что? Чтобы при первом же добавлении элемента в массив произошло перераспределение памяти и вектор стал в двое больше весить? И чтобы в векторе было хрен знает что?
Ты яркое подтверждение того, что эти эти рейтинги на сайте - полный бред.
В прошлый раз ты ерунду говорил про юникод, на что тебе указал не только я.
Люди видят рейтинг и думают, что человек уже опытен и знает вопрос хорошо, как итог - верят ему.
А не стоит.

Цитата Сообщение от Curry Посмотреть сообщение
Ему хочется спорить. В "непризнанных гипотезах" он "доказывал" что земля плоская. Сам он в это не верит. И в данном случае, возможно, уже всё понял но ... осень.
Спорить хочется тебе. Ибо ты не дал четкого ответа зачем нужна вся это бадья с установкой длинны вектора. По сути ты согласился со мной, но соглашаться тебе не хочется. Ибо хочется спорить и казаться умным. Плюс осень.
И да: верят в бога или домовых. Теория плоской земли - это научная теория.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
22.10.2020, 12:30  [ТС]
Как Тс, предлагаю остановиться. Изначальный вопрос был как раз про массивы, а не вектора.
2
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
22.10.2020, 13:25
Рыжий Лис, извини, не удержался
sodda, set_len()
This method can be useful for situations in which the vector is serving as a buffer for other code, particularly over FFI:
0
Заблокирован
22.10.2020, 16:06
Цитата Сообщение от outoftime Посмотреть сообщение
This method can be useful for situations in which the vector is serving as a buffer for other code, particularly over FFI:
И? Причем тут ситуация топик-стартера?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
13.06.2022, 10:53  [ТС]
Немного апну тему.

Вектора внезапно очень пригодились:

Rust
1
2
3
4
5
6
7
8
9
10
let mut result_len: c_uint = 20;
let mut result: Vec<u8> = Vec::with_capacity(result_len as usize);
//на всякий случай сказываем реальный размер
result.set_len(result_len as usize);
 
c_func(result.as_mut_ptr(), &mut result_len);
// устанавливаем реальный размер записанных данных
result.set_len(result_len as usize);
 
//и работаем с вектором как обычно.
Добавлено через 1 минуту
Правда, у меня создаётся ощущение, что Vec::with_capacity всё равно зануляет вектор, как минимум в дебаг-режиме.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.06.2022, 10:53
Помогаю со студенческими работами здесь

Массив: Подскажите, пожалуйста, как передать массив А в процедуру Arr?
Добрый день! Подскажите, пожалуйста, как передать массив А в процедуру Arr? using System; using System.Collections.Generic; ...

Если можно создать массив TButton, то как создать массив их событий?
Пишу программу в которой много однообразных Едитов и кнопок. Чтобы &quot;облегчить сбе жизнь&quot; создал MyEdit: array of TEdit. Аналогично...

Объявите неинициализированный трехмерный массив и присвойте значения элементам с помощью кода
Объявите неинициализированный трехмерный массив и присвойте значения элементам с помощью кода 3 слоя 1-ый слой: 111 111 111 ...

можно ли и если можно, то как в сессии создать двумерный массив ?&
нужен сабж

Как вывести массив arr на экран до сортировки?
namespace ConsoleApp15 { class Program { static void Main(string args) { int arr = new int;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru