Войти
ФлеймФорумОбщее

Работа без профессионального развития (8 стр)

Страницы: 17 8 9 1012 Следующая »
#105
17:25, 15 апр. 2015
#include <stdio.h>

int index = 0;
struct A
{
  A()
  {
    printf("%d ", ++index);
  }
};


int main() 
{
  A a[1000];
  return 0;
}

#106
17:26, 15 апр. 2015

Бунтарчик
> Можно также создать N объектов
что-то типа

struct foo {
    static int i;

    foo() {
        printf("%d\n", i++);
    }
};

int main() {
    Foo *f = new Foo[42];
}
?

мне как-то сразу в голову не пришло, трудно придумать решение в течение 20-30 секунд, если не знать его заранее.

upd.
опередил :)

#107
17:27, 15 апр. 2015

Бунтарчик
> Можно также создать N объектов,
тока тут будет цикл, внутри рантайма

#108
17:31, 15 апр. 2015

cNoNim
> тока тут будет цикл, внутри рантайма
Такой же цикл, как твой goto.

#109
17:32, 15 апр. 2015
template <int A>
struct Printer
{
  static void Print()
  {
    Printer<A - 1>::Print();
    printf("%d ", A);
  }
};

template <>
struct Printer<0>
{
  static void Print()
  {}
};

...
Printer<100>::Print();
#110
17:37, 15 апр. 2015

Бунтарчик
> Такой же цикл, как твой goto.
в моем goto используется костыль ввиде целочисленного деления,
а вот как реализована инициализация массивов я не совсем в курсе, возможно там простой цикл с условием, что не попадает под условия

#111
17:52, 15 апр. 2015

Вариант PANDA пока по-моему лучший. Если (как это сделали на SO) придраться к тому что условные операторы есть в компиляторе, то ведь остальной код тоже требует компиляции, так что тогда только готовый бинарник прокатит.

#112
18:01, 15 апр. 2015

Бунтарчик
> Спрашивать о тонкостях стандартной библиотеки - это значит вы хотите нанять
> словарь. Программист должен уметь пользоваться документацией и не обязан знать
> её наизусть.
Примерно такие вопросы мне задавали в сраном яндексе. Реально, чувак спрашивал как называется метод закрытия коннекций в Apache HTTP Client и какое полное имя пакаджа.

#113
18:15, 15 апр. 2015

PANDA
  Существует ограничение на количество вложенных вызовов шаблонов. В gcc по умолчанию вроде бы 500. Если сильно превысить, то можно нарваться на бесконечный спам сообщениями об ошибках в консоль.

+ старый вариант
#include <stdio.h>

int i = 0;
void f1() {printf("%d\n", ++i);}
void f2() {f1();f1();}
void f4() {f2();f2();}
void f8() {f4();f4();}
void f16() {f8();f8();}
void f32() {f16();f16();}
void f64() {f32();f32();}
void f128() {f64();f64();}
void f256() {f128();f128();}
void f512() {f256();f256();}

int main() {
  f512();
  f256();
  f128();
  f64();
  f32();
  f8();
  return 0;
}
#114
18:26, 15 апр. 2015

Zefick
У тебя не универсальное, задача то не до 1000 как на SO, а до N.

#115
18:32, 15 апр. 2015

kipar
Решения времени компмляции все не универсальные

#116
18:37, 15 апр. 2015

Можно также через наследование. Два указателя на 2 класса с общим родителем, один делает рекурсивный вызов функции, другой ничего не делает. Меняем индекс когда доходит до N.
По сути это как с указателями на функции, но через классы с наследованием.

#117
18:38, 15 апр. 2015

kipar
> У тебя не универсальное, задача то не до 1000 как на SO, а до N.
  Ваще изи:

#include <stdio.h>

int i = 0;
void f0() {}
void f1() {printf("%d\n", ++i);}
void f2() {f1();f1();}
void f4() {f2();f2();}
void f8() {f4();f4();}
void f16() {f8();f8();}
void f32() {f16();f16();}
void f64() {f32();f32();}
void f128() {f64();f64();}
void f256() {f128();f128();}
void f512() {f256();f256();}
void (*(fs[]))() = {f0, f1, f2, f4, f8, f16, f32, f64, f128, f256, f512};

int main() {
    int n = 1000;
    fs[((n >> 9) & 1) * 10]();
    fs[((n >> 8) & 1) * 9]();
    fs[((n >> 7) & 1) * 8]();
    fs[((n >> 6) & 1) * 7]();
    fs[((n >> 5) & 1) * 6]();
    fs[((n >> 4) & 1) * 5]();
    fs[((n >> 3) & 1) * 4]();
    fs[((n >> 2) & 1) * 3]();
    fs[((n >> 1) & 1) * 2]();
    fs[((n >> 0) & 1) * 1]();
  return 0;
}
#118
18:43, 15 апр. 2015

Zefick
> Существует ограничение на количество вложенных вызовов шаблонов. В gcc по
> умолчанию вроде бы 500. Если сильно превысить, то можно нарваться на
> бесконечный спам сообщениями об ошибках в консоль.
Там все даже хуже на самом деле. Эту переменную можно менять специальной опцией. Но компилятор жрет очень много памяти (тестил года 3 назад), когда огромная вложенность. И у меня в каком-то похожем коде получалось, что компайлер откладывал многое в рантайм. Но я много не тестил, асм не смотрел, просто заметил, что тормозит. Ясное дело, что это говнокод, но это чисто как решение задачки. Мне лично больше нравится с целочисленным делением, хорошая идея.

#119
18:43, 15 апр. 2015

9К720
> Штука баксов это средняя зарплата для большинства московских программистов. Мы
> в соседнем треде выяснили.
Ммм, не знал. Как мир-то меняется быстро.

Страницы: 17 8 9 1012 Следующая »
ФлеймФорумОбщее

Тема в архиве.