Я конкурсный программист, и я спрашивал себя, есть ли более короткий, более элегантный способ написания for(int i=0; i<n; ++i)
. Я могу использовать только стандартные C++, никаких других библиотек.Ускоренный способ итерации в диапазоне
ответ
В соревнованиях на С ++ есть хорошо известный набор макросов (не используйте его в коммерческих проектах). Вы также просили более элегантное решение (это хорошо известно решение, но наверняка не более изящным)
Например прочитать эту topcoder сайт:
#define REP(x, n) for(int x = 0; x < (n); ++x)
то в коде, вы можете просто написать
REP(i,n){
}
Один из основных полного заголовка я нашел:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
typedef vector<int> VI;
typedef long long LL;
#define FOR(x, b, e) for(int x = b; x <= (e); ++x)
#define FORD(x, b, e) for(int x = b; x >= (e); – –x)
#define REP(x, n) for(int x = 0; x < (n); ++x)
#define VAR(v, n) typeof(n) v = (n)
#define ALL(c) (c).begin(), (c).end()
#define SIZE(x) ((int)(x).size())
#define FOREACH(i, c) for(VAR(i, (c).begin()); i != (c).end(); ++i)
#define PB push_back
#define ST first
#define ND second
Ну, некоторые из них довольно устарели, но идея блестящая! –
Без работы, приуроченные тесты, я бы предположить, что оба:
for(int i=0; i<n; ++i)
и:
int i=0;
while (i<n)
{
i++
}
будет чрезвычайно близко по времени. Возможно, используйте временные метки в программе, которая запускает оба типа циклов, и посмотрите, какое общее время/цикл для каждого типа.
Таковы основные Сквозные структуры C/C++, так что я не думаю, что там будет что-то, что будет работать быстрее (но я готов быть не так, если я узнаю что-то новое)
Единственный механизм, который я могу придумать с головы, который будет быстрее, - ** goto _label _ **. Но это очень неприятная возможность червей, и ее нужно рассматривать как таковую. –
Есть ли что-то вроде моего питона, например? –
Не об этом я знаю. Если есть, я уверен, что кто-то будет говорить по теме относительно скоро. –
Видя вы Бесполезный «т указать, нужно ли использовать i
как о [1]:
int i=n+1; while(--i);
Его короче!
[1] Неверный ответ.
Если вы используете 'i', но в обратном порядке, лучше использовать' for (int i = n; i -;) ', поэтому используется, по крайней мере, правильный набор значений' i' (до тех пор, n' не является отрицательным) – JSF
- 1. Ускоренный способ итерации через большой NSArray словарей
- 2. Ускоренный способ итерации через зубчатый массив?
- 3. Ускоренный способ обратной строки?
- 4. Ускоренный способ окраски UIImage?
- 5. Ускоренный способ заполнения UITableView?
- 6. Ускоренный способ добавления форматирования
- 7. Ускоренный способ разбора .pcap
- 8. Что такое стабильный способ итерации в диапазоне с пользовательским шагом?
- 9. Ускоренный способ выполнения операции замены в python?
- 10. Ускоренный способ избежать ловушки исключения
- 11. Ускоренный способ делать снимки ios
- 12. Ускоренный способ добавления многомерных матриц?
- 13. Ускоренный способ создания больших BufferedImages
- 14. Ускоренный способ захвата регулярного выражения
- 15. Ускоренный способ записи в excel в powershell
- 16. , итерации через связанныйhashmap, но в определенном диапазоне
- 17. Ускоренный способ разбора строки JSON в android
- 18. Ускоренный способ разделить текст в Delphi TStringList
- 19. Ускоренный способ использования фильтра в sparkR
- 20. Ускоренный способ записи данных в несколько столбцов?
- 21. Ускоренный способ форматирования текста в RTB
- 22. Ускоренный способ группового времени суток в пандах
- 23. Ускоренный способ прохождения csv-файла в C++
- 24. Ускоренный способ вычисления `nchoosek` в MATLAB
- 25. Ускоренный способ загрузки изображений в виде коллекции
- 26. Ускоренный способ подсчета файлов в Python
- 27. Ускоренный способ вставки данных в neo4j?
- 28. Ускоренный способ загрузки файла в java
- 29. Ускоренный способ создания перевернутого списка в Mongo
- 30. Ускоренный способ обновления таблицы в Oracle
О названии, я имел в виду «Faste r способ записи ... ' –
Я думал о чем-то подобном 'for i в диапазоне (0, n):' от python. –
Непонятно, как вы собираетесь использовать 'i'. Если вы будете использовать его для индексирования, скажем, 'const char s [] =" abc ";', вы можете написать 'for (auto c: s);' – ZDF