Сложный цикл for

131
01 декабря 2019, 07:40

Мне нужно реализовать один отдельный цикл, он должен быть примерно такой

 int i = 0
 int c = 10
 T1 = <
 T2 = ++
    for (; i T1 c; i T2)
    {
        cout << i << " i " << this_thread::get_id() << "\n" << endl;
    }

Мне интересно, возможно ли T1 и T2 сделать оператором <, ++, -- или *

Изменить операторы ++ на -- вносить их в переменные или что то с ними делать.

Еще вариант такой, возможно как то добавить условия

template <typename T1, typename T2, typename T3, typename T4>
auto test(T1 a, T2 b, T3 c, T4 x)
{
    cout << a << endl;
    cout << b << endl;

    for (; a c b; a x)
    {
        cout << a << " |a " << this_thread::get_id() << "\n" << endl;
    }
}

//test(2.242, <, 20, ++);
Answer 1

И в с++ и в с# можно записать так

for (; i != c; i += ((i>c)? -1:1) ) {
   }

Где операцию ++ -- можно задать как i = i + 1 и i + i + (-1); благодаря тернарному оператору. (условие)?если_да:если_нет. В даном случае условие i>c - если i больше с будет прибавлятся -1, иначе +1.

В с++ можно сделать макрос (#define для T1 T2) и сделать файл с циклом:

  for (; i T1 c; i T2)
   {
    // ...
   }

с макросами тяжелее будет что-то менять. Но выкрутится можно так - файл_с_циклом.с

 if (i < c) {
  #define T1 >
  #define T2 ++
  #include "файл_с_циклом.с"
  #undef T1
  #undef T2
    } else {
  #define T1 <
  #define T2 --
  #include "файл_с_циклом.с"
  #undef T1
  #undef T2
  }

Макросом же можно даже спаковать это в один файл. Типа так (итог)

 #ifndef T1
    // Основная программа
 if (i < c) {
  #define T1 >
  #define T2 ++
  #include "файл_с_циклом.h"
  #undef T1
  #undef T2
    } else {
  #define T1 <
  #define T2 --
  #include "файл_с_циклом.h"
  #undef T1
  #undef T2
  }
 // Продолжение
 #else
    for (; i T1 c; i T2){
    cout << i << " i " << this_thread::get_id() << "\n" << endl;
}
 #endif
Answer 2

C#

  Func<int, bool> T1 = iter => iter < 100;
  Func<int, int> T2 = iter => iter + 1;
  int i = 0;
  for (; T1(i); i = T2(i))
  {
  }
Answer 3
auto t = [](int i) { return i < 1000; };
int di = -1;
for (int i=0; t(i); i+=di)
  ...
READ ALSO
Ренейм классов и переменных?

Ренейм классов и переменных?

хотел бы поинтересоватьсяСмотрел через ilspy код программы и мой глаз зацепила такая особенность:

131
Отправка данных

Отправка данных

Надо отправить данные типа int на front-end await ClientsAll

146
Запуск и компиляция C++ кода из C# на лету

Запуск и компиляция C++ кода из C# на лету

Краткая история: пишу дипломОптимизация с++ кода

129
Технология связки в WPF

Технология связки в WPF

Разбирался с binding в WPF и столкнулся с проблемойУ меня есть класс "Sensor", окно, в котором расположен только "DataGrid"

118