Автор Тема: Очень простой цикл  (Прочитано 56614 раз)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Очень простой цикл
« Ответ #60 : Июнь 05, 2012, 06:03:41 am »
В обоих случаях не обломается.

По поводу forward итертаоров. Ты уверен, что запрещается специализировать std::search для более специализированных итераторов (random)?
Залез в стандарт. Там все специализации прописаны явно (например для vector<bool> и всякие алгоритмы специализированные для разных типов данных), так вот, специализаций search для более конкретных итераторов (bidirectional, random) там нет. А все что не разрешено, то, запрещено. В данной области.

По факту ведь просто шаблонный класс и специализация его (того же vector'a) это два РАЗНЫХ класса, никак друг с другом не связанных. Аналогично и для функций. Поэтому в стандарте все они приводятся явным образом. Поэтому в реализации стандартной библиотеки нельзя рядом с template<typename ForwardIterator1, typename ForwardIterator2>search(...) дописать template<> char* search<char*, char*>(...) не нарушив при этом стандарт.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Очень простой цикл
« Ответ #61 : Июнь 05, 2012, 06:12:47 am »
Да  Алексей, ирония судьбы.. припоминаю с пол года назад вы (и я) издевались над ритуалом коровцев , по которому, они по случаю всякой фигни лезли в толмуды... Сравнивая ваши действия сейчас...ммм в голову лезут весьма злобные и жестокие  слова.. Но замечу ИМХО если уж заниматься идолопоклонничеством, то религия коровят попроще будет...

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Очень простой цикл
« Ответ #62 : Июнь 05, 2012, 06:25:42 am »
Да  Алексей, ирония судьбы.. припоминаю с пол года назад вы (и я) издевались над ритуалом коровцев , по которому, они по случаю всякой фигни лезли в толмуды... Сравнивая ваши действия сейчас...ммм в голову лезут весьма злобные и жестокие  слова.. Но замечу ИМХО если уж заниматься идолопоклонничеством, то религия коровят попроще будет...
Да не, я без идолопоклонничества, я просто читаю доку инструмента который использую. В случае Оберона это будет Oberon report by NW, в случае Go это будет вот это + это, в случае С++ естественно будет стандарт, как и в случае с Адой например. Если поведение инструмента отличается от того, что должно быть по спеке, я завожу багрепорт и эти баги таки фиксятся, как видим.

Все абсолютно формально и без эмоций :-)

У "коровят" пунктик обратный - там живут не по закону (спеке на язык) а по понятиям (как они привыкли, как им кажется правильным - например откуда то у них внезапно появилась проверка выхода за границу массива в Обероне).
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Очень простой цикл
« Ответ #63 : Июнь 05, 2012, 06:40:26 am »
Решение через КА - черезчур громоздким. Поэтому было интересно кто как такое решает.
ну на хацкеле фактически КА получился -- и всё простенько и чотко -- никакой громоздкости!
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

DIzer

  • Гость
Re: Очень простой цикл
« Ответ #64 : Июнь 05, 2012, 06:45:43 am »

Да не, я без идолопоклонничества, я просто читаю доку инструмента который использую. ....
  ;) Ну ну, что за язык такой, что для решения подобных задач требуется залезть в толмуды... а залезши
использовать принцип "что не запрещено, то разрешено". Вообщем, предлагаю сие действо назвать "STL- ритуалом". :)
« Последнее редактирование: Июнь 05, 2012, 06:47:25 am от DIzer »

DIzer

  • Гость
Re: Очень простой цикл
« Ответ #65 : Июнь 05, 2012, 06:49:55 am »
.. а людей занимающихся этим  по малейшему поводу ( и в особенности , без оного) - STL- культистами.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Очень простой цикл
« Ответ #66 : Июнь 05, 2012, 06:53:47 am »

Да не, я без идолопоклонничества, я просто читаю доку инструмента который использую. ....
  ;) Ну ну, что за язык такой, что для решения подобных задач требуется залезть в толмуды... а залезши
использовать принцип "что не запрещено, то разрешено". Вообщем, предлагаю сие действо назвать "STL- ритуалом". :)
В данном случае не язык, а стандартная библиотека. Любая библиотека на любом языке как только становится больше одного вендора (больше одной независимой реализации) требует залезать в доки. Причем как в спеки стандартные, так и в доки конкретных реализаций, а потом еще, до кучи, в исходники этих реализаций (а потом еще смотреть специфику поведения всего этого на конкретной железке с конкретной осью).

Повторюсь - это не специфично для C++, это у подобной библиотеки на любом языке так. Например это так у той же Java.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Очень простой цикл
« Ответ #67 : Июнь 05, 2012, 06:59:44 am »
это "ежу понятно"... я говорю вам про то, что прилагаемые усилия неадекватны рассматриваемой задаче..

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Очень простой цикл
« Ответ #68 : Июнь 05, 2012, 07:08:08 am »
Я там когда свое решение приводил - говорил откуда данные. Голый wchar_t* там, без длины. Избаловался ты на всяких разных ЯВУ... :)
В случае stdin как раз проблем нет, у него есть eof :)

Ух ты! Без длины! Ну тогда это ещё проще, вот:

int n = 0;
do
{
   while (a[n] != 0)
   {
      n++;
   }
   n++;
}
while (a[n] != 0);

искомая позиция равна n - 1;

Идея цикла та же что и в прошлый раз: сверхмоментально линейным поиском отыскиваем первый ноль

while (a[n] != 0)
{
   n++;
}

затем проверяем нужно ли это дело повторить ещё разок. Пожалуй это самый быстрейший поиск.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Очень простой цикл
« Ответ #69 : Июнь 05, 2012, 07:22:01 am »
это "ежу понятно"... я говорю вам про то, что прилагаемые усилия неадекватны рассматриваемой задаче..
Да какие там усилия - с утра под чаёк полчасика поковырялся, заодно C++ вспомнил (давненько на нем не писал).
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Очень простой цикл
« Ответ #70 : Июнь 05, 2012, 07:37:19 am »
Чета тут обобщать задачу начали. ??? info21 циклом дейкстры махает... Лично я код писал под конкретную задачу.
Если уж обобщать, то бойер-мур...  :P  ;)

DIzer

  • Гость
Re: Очень простой цикл
« Ответ #71 : Июнь 05, 2012, 07:46:56 am »
.....
затем проверяем нужно ли это дело повторить ещё разок. Пожалуй это самый быстрейший поиск.
Да, ИМХО пожалуй самое ясное из частных решений "с претензиями", поздравляю.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Очень простой цикл
« Ответ #72 : Июнь 05, 2012, 07:54:41 am »
Чета тут обобщать задачу начали. ??? info21 циклом дейкстры махает... Лично я код писал под конкретную задачу.
Если уж обобщать, то бойер-мур...  :P  ;)
Я не обобщал. Честно-честно! На плюсах (то есть не Си) я бы ровно так и написал бы. Просто потому что лениво циклы писать а потом их еще и читать :-)

На других языках (Go, C, возможно даже Java) скорее всего пришлось бы таки написать какой-то цикл.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Очень простой цикл
« Ответ #73 : Июнь 05, 2012, 07:56:06 am »
Я там когда свое решение приводил - говорил откуда данные. Голый wchar_t* там, без длины. Избаловался ты на всяких разных ЯВУ... :)
В случае stdin как раз проблем нет, у него есть eof :)

Ух ты! Без длины! Ну тогда это ещё проще, вот:

int n = 0;
do
{
   while (a[n] != 0)
   {
      n++;
   }
   n++;
}
while (a[n] != 0);

искомая позиция равна n - 1;
Это 1 в 1 решеие Влада.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Очень простой цикл
« Ответ #74 : Июнь 05, 2012, 07:57:37 am »
только без вые..онов  ;) - Это раз, Влад знал задачу ПОЛНОСТЬЮ - в отличии от других, это два...
« Последнее редактирование: Июнь 05, 2012, 07:59:52 am от DIzer »