Задать вопрос
  • Как реализовать алгоритм на С++?

    @HabrArkady Автор вопроса
    Код я приводить не буду. Он достаточно сложен, чтобы сходу так разобраться. Даже сама идея алгоритма очень трудна для понимания. А уж по поводу реализации то и подавно. А в чем проблема попытаюсь объяснить.
    new a0;
    new ptr_a;
    цикл (по условию)
    {
    new b; b = F(ptr_a);
    new a; a = G(b);
    ptr_a = a;
    delete b;
    if (условие выполняется) => delete a;
    }
    delete a0;
    delete ptr_a;
    Надеюсь схему привел достаточно понятно и наглядно. В чем проблема?
    Если убрать цикл (т.е. при однократном проходе), то все работает идеально, вообще никаких проблем.
    Проблема возникает при повторном проходе, при второй, третьей итерации и т.д.
    Условие не выполняется, следовательно запускается повторно. Мы имеем реальный, нормальный массив а, массива b нет. Заходим в цикл - первая строчка цикла выполняется без проблем. Создаем массив b, находим значения массива b, массив а нам уже не нужен. Его необходимо удалить, чтобы создать заново с новой размерностью.
    Например по условию - if (проход !=1) => delete a;
    И все приехали. Хотя массив а существует, реальный, нормальный, а удалить его нельзя.
    Более того, то, что оператор < delete a > находится строчкой выше оператора < new a > воспринимается как синтаксическая ошибка.
    Если вкратце, то так.
    Написано
  • Как реализовать алгоритм на С++?

    @HabrArkady Автор вопроса
    Этот подход аналогичен подходу, когда при каждом прогоне создается новое имя. Памяти используется, конечно, чуть меньше, но не совсем то, что хотелось бы. Есть и такая версия.
    Написано
  • Как реализовать алгоритм на С++?

    @HabrArkady Автор вопроса
    Да Visual Studio не дает ставить оператор delete перед оператором new. Проблема как раз в этом. Выдается ошибка на этапе компиляции. А ухищрения в том, что пытаюсь показать, что это повторный проход и что объект уже создан.
    Написано
  • Как реализовать алгоритм на С++?

    @HabrArkady Автор вопроса
    Не получается. В том то и вопрос, что он удалить не дает. Оператор delete будет стоять перед new. И никакие ухищрения не помогают.
    Написано
  • Как реализовать алгоритм на С++?

    @HabrArkady Автор вопроса
    Я знаю как реализовать, я написал программу, она работает прекрасно. Меня как раз интересует вопрос: “Как реализовать такой алгоритм, используя динамическую память на С++ и только два имени”? Именно для уменьшения объема используемой памяти. Не нравится, когда используется только 10-я или 100-я часть из зарезервированного объема. На бумаге алгоритм работает прекрасно. Вопрос: "Как реализовать программно"?
    Написано