Обновить
26
0
Александр Дербенёв @alexac

Senior Software Engineer

Отправить сообщение
Сейчас меня закидают помидорами, но…

На какие только извращения не идут люди, чтобы не использовать *nix.
Только не говорите, что не знаете о mingw. Всё вполне работает.
Зато gcc поддерживает, его даже под виндой вам использовать никто не запретит.
Это же не оптимально!

Дело в том, что компиляция программы — действие единичное, а вот запуск — регулярное.
Подправьте немного код, чтобы можно было вводить элементы массива и условия поиска, и запустите поиск миллиард раз, в сумме времени компиляции и времени работы, время компиляции уже будет ничтожно мало.

#offtop
Подобным образом люди ошибаются регулярно.
Мне часто приходится наблюдать такое, когда я говорю знакомым, что использую gentoo в качестве основной системы. Я не отрицаю, что сборка с нуля системы и всего софта, что я использую (ну не совсем с нуля, а со stage3) на моем ноуте занимает чуть больше суток, однако я получаю очень быструю и стабильную систему. Можно пытаться возражать, что оптимизация под машину не дает прибавки скорости, но пока не попробуешь сравнить, не увидишь реальное положение дел. Я пробовал использовать дистрибутивы, использующие бинарные пакеты, субъективно, скорость работы сильно различается, я склонен думать, что это связано с тем, что я один раз потратил время на то чтобы подобрать длинную строку флагов компилятора и дождался окончания сборки.
Честно, не подумал об алкоголиках… не надо обобщать.

Возможно, конечно, это связано с тем, что я прочитал половину фразы и перечитал её сначала — почему-то затрудняюсь читать курсив.
Можно поиграться с алгоритмами сжатия, но Вы, имхо, правы, полноценный язык — слишком жирно, а то найдутся умельцы трояны писать.
Вот именно в таких конструкциях проявляется глубина русского мата… Такое, имхо, грех заменять.
Совсем нет.

По стандарту не задается размер int, есть только рекомендация делать его равным машинному слову. на 64 битах машинное слово будет равно 64 битам, и размер int, скорее всего будет зависеть от настроек компилятора. Компиляторов много разных, поэтому с каким нибудь может получиться, что int имеет размер 64 бита. Попробовал добиться этого от GCC, но там для x86 и x86_64 размер int всегда равен 32 битам.
Windows 2008 R2 Standart x64 не падает.

Да, в коде есть небольшая ошибка — в третьей снизу строке должно быть hdc вместо Device, иначе будет ошибка компиляции.
У многих моих знакомых (да и у меня) складывается абсурдная ситуация, когда в армию годен, а на военку — нет.
Думаю, Дворак. Так как разрабатывался без оглядки на остальные клавиатуры, но с опорой на эргономику.
К слову мировой рекорд скорости (150 слов в минуту на протяжении 50 минут) был установлен именно с помощью раскладки Дворака. (точнее упрощенной раскладки Дворака), собственно та же женщина достигала 170 слов в минуту на короткие промежутки времени и выдала рекордные 216 слов в минуту.
Вру. в C++11 появился шаблонный класс array, который не хранит размер массива, но использует значение аргумента шаблона.
Кстати, с массивами в C++ не все так просто. С одной стороны, это просто последовательно расположенные в памяти данные, как это было в C, с другой, если точно известен размер массива в данном контексте, то доступны итераторы по этому массиву (по крайней мере в C++11).

void f(int [] array, size_t size);
/* ... */
int array[5];

/* тут доступны begin() и end() */
for (int a : array) {
    std::cout << array << std::endl;
}

f(array, 5);

/* ... */
void f(int [] array, size_t size) {
/* а тут уже нет */
    for (int i = 0; i < size; ++i) {
        std::cout << array[i] << std::endl;
    }
}
На самом деле, после C++ во многих языках не хватает переопределения операторов — может пригодиться как в простых случаях вроде операций с матрицами, так и вот в подобной магии с функторами (одна из вещей, что раздражают меня в java — нельзя создать простой callback, приходится городить анонимные классы с именованными методами).
В C и C++ можно было взять указатель на функцию, это не делает функцию объектом, с одинаковым успехом можно написать:

int f() {
    return 123;
}

/* будет работать */

int (*ptr)() = f;
(*ptr)();

/* допустимо, но никто не гарантирует, что это будет работать на конкретной машине */

int (*ptr)() = (int (*)()) 0xfe017c24h;
(*ptr)();


В C++11 появились лямбды.

bool c = true;
std::function<bool(int, int)> f = [&] (int a, int b) -> bool {
    return c ? a < b : a > b;
}

/* ... */

c = true;
f(5, 3); // false
c = false;
f(5, 3); // true


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

struct __my_functor{
    bool& c;
    __my_functor(bool &c): c(c) {}
    bool operator() (int a, int b) { return c ? a < b : a > b; }
};

/* ... */

bool c = true;
__my_functor f(c);

/* ... */
c = true;
f(5, 3); // false
c = false;
f(5, 3); // true


То есть в C++, благодаря перегрузке операторов, объект может прикинуться функцией, но функция не является объектом.
В C++ функции — это не объекты. По факту, там даже методы (в том числе виртуальные) — обычные функции, но со скрытым параметром this.
он же летит с запада на восток…
Только после четвертой, все-равно, почему-то, шестая идет.
7 категорий:
I.…
II.…
III.…
IV.…
V.…

Собственно дайджест:
I.…
II.…
III.…
IV.…
VI. (sic!)…

Однако, вы заставили меня прочитать пост несколько раз…
Решение с временным файлом будет немного универсальнее — кто знает, как много данных нужно записать? А вдруг память закончится?
Тем более, можно использовать что-то вроде:

grep '^Success:\s ' < messages.log > messages.log_ ; mv messages.log{_,}


Относительно кратко и делает ту же работу.

Информация

В рейтинге
Не участвует
Дата рождения
Зарегистрирован
Активность

Специализация

Десктоп разработчик
Старший
От 100 000 €