Есть ли способ сформировать за время компиляции статический массив заполненный простой последовательностью типа 1,2,3,4......n так, чтобы значения из которого можно бы считывать в функции main?
что-то вроде
int main()
{
constexpr char arr[10] = {1,2,3,4,5,6,7,8,9,10}; - значений мало, легко записать вручную.
...
}
А если нужно такой же, но на 1000 элементов?
C/C++
Constexpr инициализация статических массивов.
Программный стек не резиновый. Для хранения 1000 элементов следует использовать кучу, а данные в контейнер загружать из базы или из файла. Сам контейнер сокрыть в пользовательском типе и ограничить к нему доступ в соответствие с целями и задачами, инициализацию выполнить в конструкторе путём подключения к базе данных или файлу с данными. Если данные только для чтения, то хранящий их объект следует сделать константным, а если планируется обращаться к нему многократно и из разных частей программы, то следует объявить его статическим с использованием ключевых слов inline static const
Если объект такого типа имеет другие поля, которые необходимо изменять во время выполнения программы, то такие поля помечаются ключевым словом mutable
Если объект такого типа имеет другие поля, которые необходимо изменять во время выполнения программы, то такие поля помечаются ключевым словом mutable
Если 1000 элементов и влом забивать все руками - то в таких случаях используют системы ресурсов.
Qt компилятор ресурсов идёт по подобному методу и генерирует из файла c++ исходник с массивами, что, естественно, замедляет компиляцию
На винде - виндовая система ресурсов.
В gcc / objcopy - есть возможность превратить произвольный файл в объектный и прилинковать его к исполняемому. После этого становятся доступными символы начала и окончания бинарного блока, типа такого:
Qt компилятор ресурсов идёт по подобному методу и генерирует из файла c++ исходник с массивами, что, естественно, замедляет компиляцию
На винде - виндовая система ресурсов.
В gcc / objcopy - есть возможность превратить произвольный файл в объектный и прилинковать его к исполняемому. После этого становятся доступными символы начала и окончания бинарного блока, типа такого:
extern char _data_txt_start;
extern char _data_txt_end;
Ну и наконец - библиотеки, работающие с архивами, одно из самых общепринятых средств.Цикл for_each и for как я понимаю здесь будет не уместен, раз речь идет об инициализации массива во время компиляции, а не во время выполнения?
Похожие вопросы
- Помогите решить задачу на С++, используя статические массивы
- Помогите, пожалуйста решить на C++, используя многомерные статические массивы
- Работа с многомерным статическим массивом на с++
- Составить программу для обработки одномерных статических массивов.
- Устройство статических и динамических массивов в оперативной памяти (...)
- Имя массива после инициализации принимает адрес в стеке, который указывает на адрес в куче? (Си)
- Объясните мне разное поведение sizeof для статической константы и динамического массива. C.
- Заменить нулями элементы массива, которые расположены между первым минимальным и последним максимальным элементами масси
- Помогите исправить и дописать программу с массивами на языке C++. Буду благодарен, т. к. самому уже не понятно.
- Нужна помощь в составлении одномерных массивов С++
Просто понапридумали всяких consteval и constexpr, а толку от них...