Как эффективнее создать алгоритм? Задаётся двумерный массив, скажем размером аб. и эти самые а и б уже никогда не изменятся больше. Создаю трёхмерный массив, у которого первый индекс бывает только 0. Над этим массивом проводятся некоторые вычисления, на их основе создаётся новый массив аб. На этом моменте мне нужно добавить ещё один массив размером аб, а первый индекс трёхмерного массива сможет быть 0 и 1, и так дальше, пока не будет найден "правильный" массив размером аб. сохранять предыдущие состояния нужно затем, что к ним часто придётся возвращаться. Выделяю память в начале через malloc, а дальше изменяю размер через realloc. Я так понимаю, что realloc на самом деле ищет место в памяти нужного размера, затем копирует предыдущий массив в новое место, а старую память очищает. В моём случае массив часто будет расти, а значит постоянно нужно будет тратить время на перенос данных из одного участка памяти в другой. Есть другой способ провернуть всё это, чтобы не перемещать данные? Угадать/вычислить заранее кол-во требуемой памяти невозможно даже примерно, максимальный первый индекс запросто может быть и только 0 и 100500, всё зависит от вводимых данных в первый массив а*б размера.
В комментарий код не воткнешь нормально...
Вот что предлагал я, если размеры 2d фиксированы:
#include <vector>
#include <array>
#include <iostream>
#include <iomanip>
using namespace std;
const int ROWS = 5, COLS = 8;
using Matrix = array<array<int,COLS>,ROWS>;
int main(int argc, const char * argv[])
{
vector<Matrix> a(1);
for(size_t r = 0; r < ROWS; ++r)
{
for(size_t c = 0; c < ROWS; ++c)
{
a[0][r][c] = r+c;
}
}
//....
Matrix b;
for(size_t r = 0; r < ROWS; ++r)
{
for(size_t c = 0; c < ROWS; ++c)
{
b[r][c] = r*c;
}
}
a.push_back(b);
}
Решил следующим образом создание массива 1,w,v:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
unsigned char w = 5, v = 4;
vector<vector<vector<unsigned char>>> ar;
ar.assign(1,vector<vector<unsigned char>>(w,vector<unsigned char>(v,0)));
return 0;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте! Я новичок в программированииНеобходимо реализовать операции сложения, вычитания и тп
Нужно организовать проверку элементов двумерного массива по диагонали с рандомных координат, по аналогии с ходом коня в шахматахВот часть...