Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 491

Создание произвольного синтаксиса для работы с массивами

05.06.2020, 12:04. Показов 1348. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день,

Вот в С++ имеется возможность задания массива например вот так:
C++
1
int x[10][20];
Таким образом `х` это двумерный массив размером 10 на 20.
Возможно ли написать собственный класс для массива произвольной размерности, где будет сохранен подобный синтаксис в квадратных скобках, и добавлена возможность извлечь определенные элементы (элементы на пересечении строк со 2 до 5 и столбцов с 6 до 8) с помощью синтаксиса:
C++
1
x[2:5][6:8];
Как создать подобный синтаксис (для массив произвольной размерности)?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.06.2020, 12:04
Ответы с готовыми решениями:

Особенность синтаксиса работы с массивами
Приветствую всех. Вот недавно наткнулся не нетипичный, как для меня, синтаксис работы с массивом. Имеем массив: int array =...

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

Создание класса для работы с массивами чисел
Сделать класс для работы с массивами чисел. У класса должно быть 5 метода. 1. Получение первого элемента массива. 2....

30
05.06.2020, 16:13
Студворк — интернет-сервис помощи студентам

Не по теме:

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

0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.06.2020, 16:14
Kerim_Geophysic, Выше же были примеры с variadic templates магией.
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
05.06.2020, 16:20
Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
возможно ли создать такую функцию которая принимает неограниченное количество параметров
я думаю, это возможно. Ведь есть же функции с неизвестным заранее количеством параметров. Типа printf.
Но всетки подумай над предложениемАлексей1153 (пост 13) и моим. Описание того, что тебе нужно, поместить в строку. И уж ты сам это описание разбираешь и понимаешь. По сути, это создание своего языка. Но и "транслятор" к нему - тоже свой.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
05.06.2020, 16:45
Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
void myFunc(std::vector<int> rows, std::vector<int> cols, std::vector<int> slices, ...);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
template<class... Args>
void intersection(const Args&... args)
{
}
 
int main()
{
    const int rows[] = { 1,2,3 };
    const int cols[] = { 1,2,3 };
    intersection(rows, rows, rows, cols, cols, cols);
}
Цитата Сообщение от Байт Посмотреть сообщение
всетки подумай над предложениемАлексей1153 (пост 13)
рецепт как поиметь гемморой, и низкую производительность ?
1
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 491
05.06.2020, 16:54  [ТС]
Ребят, спасибо всем! Мне надо обмозговать все что было предложено и попробовать реализовать
Цитата Сообщение от Байт Посмотреть сообщение
ЗЗЫ. Если взяться за дело с умом и старанием, может получиться интересный класс...
Вы меня вдохновили этой фразой
Но мне очень важна производительность, надо пару дней.
hoggy, спасибо, в ближайшее время попробую. Пока что я не соображу (я начинающий), но думаю что у вас есть решение и оно должно работать. Надо попробовать
0
76 / 68 / 10
Регистрация: 11.07.2016
Сообщений: 320
05.06.2020, 17:53
А не рассматривалась идея не пихать всё в одну кучу, а построить всё вокруг базовой матрицы? В частности, 3д матрицу можно "переосмыслить" как "массив" 2д матриц. В таком случае, просто, можно для 2д матрицы написать очень простой stl-совместимый итератор, для 3 добавить 1 простое условие для прыжка, и так далее. Единственное, что смущает - количество проверок внутри итераторов. Хотя для достаточно больших "суб"-матриц это частично скомпенсируется предсказателем ветвлений, но всё же.
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,289
05.06.2020, 18:07
Zirak, можно ещё такой синтаксис без сахара:

C++
1
new_object=object.rows(1,3).rows(10,11).cols(5,7).rows(16).cols(100).extract();
то есть, rows и cols возвращает ссылку на сам объект, но при этом внутри устанавливают списки строк и столбцов накопительно.
extract извлекает результат (создаёт новый объект и возвращает его), при этом списки очищаются

ну и нет защиты от случая, если пользователь не вызвал extract - списки не очистятся сами

с сахаром выглядело бы так
C++
1
new_object=object.extract("((1-3,10-11,16),(5-7,100))");
по производительности оба случая одинаковые. Я бы даже поставил на строку


Если размерностей больше двух, то можно изобрести метод coordN(N,start,stop) . Либо, в случае строки, продолжить перечисление в дальнейших скобках
0
76 / 68 / 10
Регистрация: 11.07.2016
Сообщений: 320
05.06.2020, 18:13
Не, я тут подумал, чтобы не ломать голову мерностями, 3д - матрица массивов, 4д - матрица матриц и так далее. Всю информацию можно в один массив запихнуть, формула для расчёта индекса элемента в зависимости от мерности получается довольно простой, к тому же.

упд. Алексей1153, что-то такое, но видится мне, можно в одну перегрузку () всё уместить
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,289
05.06.2020, 18:18
Zirak, да, для хранения N-мерного объекта одного вектора достаточно + список из N размеров
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.06.2020, 18:35
Вопрос велико ли отличие от

C++
1
2
3
object.setRows(1,3);
object.setCols(1,3);
auto value = object.build();
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,289
05.06.2020, 18:40
Avazart, по сути - то же самое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.06.2020, 18:40

Создать программу для работы с массивами структур - создание и вывод на экран
Создать программу для работы с массивами структур - создание и вывод на экран

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

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

Функции для работы с массивами
Драсьте, помогите плиз сделать лабу по C++ :) Необходимо написать функции для работы с одномерными массивами: 1) Отведение памяти под...

Процедуры для работы с массивами
Здравствуйте , вот нужно пару заданий доделать , но просто физически не успеваю уже(и так уже 2 дня подряд решаю ) , может кто-то знает как...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru