Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

нужен совет программистов!

1388  1 2 3 4 5 6 все
Simple Nothing is f*cked22.01.18 12:04
Simple
NEW 22.01.18 12:04 
в ответ Van Doren 22.01.18 11:59

хаха

#81 
Simple Nothing is f*cked22.01.18 12:05
Simple
NEW 22.01.18 12:05 
в ответ moose 22.01.18 12:02

Конечно, можно. Так и джаве можно без генериков обойтись, но надо ли? Шаблоны - это такой же инструмент, как и остальные фичи языка, и если он облегчает жизнь, его надо использовать.

#82 
  zucchero гость22.01.18 12:35
NEW 22.01.18 12:35 
в ответ zucchero 22.01.18 07:57
// function template II
#include <iostream>
using namespace std;

template <class T>
T GetMax (T a, T b) {
  return (a>b?a:b);
}

int main () {
  int i=5, j=6, k;
  long l=10, m=5, n;
  k=GetMax(i,j);
  n=GetMax(l,m);
  cout << k << endl;
  cout << n << endl;
  return 0; 

} takoe mne legce ponjatj.,teper ja znaju cto takoe template.

#83 
Van Doren коренной житель22.01.18 12:49
Van Doren
NEW 22.01.18 12:49 
в ответ zucchero 22.01.18 12:35

Это одно из применений шаблонов, да. Мы избегаем повторного написания функции для всех типов , которые мы используем. Вместо этого мы пишем одну шаблонную функцию, а компайлер за нас инстанциирует (то бишь генерирует) эту функцию для используемых нами типов.

Ещё одно использование - параметризация функции. Пример (здесь мы с помощью шаблона параметризуем размер используемого массива):

template< size_t N >  // optimal N = 16-128K
std::string load_file( const char* filename )
{
    std::ifstream ifs( filename, std::ios::binary | std::ios::in );
    std::tr1::array< char, N > buffer;
    std::string s;
    ifs.seekg( 0, std::ios::end );
    s.reserve( ifs.tellg() );
    ifs.seekg( 0 );
    while( ifs )
    {
        ifs.read( buffer.data(), buffer.size() );
        s.append( buffer.data(), ifs.gcount() );
    }
    return s;
}


Ещё одно использование - вывод типов, но это такие дебри куда новичку лучше не лезть. В С++ отсутствует рефлексия, поэтому шаблонами злоупотребили для получения разной информации о типах... Более того, даже целый парсер-генератор накатали на шаблонах. Это прикольно, но тоже не для новичков.


А что касается алгоритмов, вот есть хорошая книжка по соревновательному программированию, там рассмотрены большинство существующих алгоритмов http://vandoren.strana.germany.ru/cp3.pdf

#84 
  zucchero гость22.01.18 13:29
NEW 22.01.18 13:29 
в ответ Van Doren 22.01.18 12:49

Скажите,Van Doren, вы верите(или отчасти),в то что было указано в статье Ilghis?

Ещё вопрос:Вы сказали, с++ очень узко используется.В каких именно? Где на практике,для чего?

#85 
  moose старожил22.01.18 13:48
NEW 22.01.18 13:48 
в ответ Simple 22.01.18 12:05
Так и джаве можно без генериков обойтись

вы имеете ввиду без создания своих, или без использования? если второе, то очень вряд ли : )

Шаблоны - это такой же инструмент, как и остальные фичи языка

нет, здесь я не согласен.

и если он облегчает жизнь, его надо использовать.

, и нужно добавить ", а если усложняет - то поотрывать руки тому, кто использует".


я вспоминаю, как работал в одной фирме с очень успешным и всемирно распространенным продуктом. так вот один из ведущих специалистов (считался экспертом на фирме по с++, вот прямо как Ван Дам), так он свой класс "динамический вектор" или что-то такое написал (и это было интегрировано в продукт!), и все только потому, что ему не нравился std::vector, у него часто возникали прерывания в коде самого темплейта, а разбираться в реализации (посмотрите одну из здесь https://gcc.gnu.org/onlinedocs/gcc-4.6.3/libstdc++/api/a01...) ему не хотелось. а товарищ хотел ясно понимать (и чтобы все понимали), что у него происходит. вот бы их с Ван Дамом свести, они бы наверняка подружились : )


#86 
Van Doren коренной житель22.01.18 13:52
Van Doren
NEW 22.01.18 13:52 
в ответ zucchero 22.01.18 13:29

В каком смысле верю? Вы про интервью 20-летней давности? Это в айти вечность, ничто из этого не имеет сегодня значения в любом случае.

#87 
Van Doren коренной житель22.01.18 14:00
Van Doren
NEW 22.01.18 14:00 
в ответ moose 22.01.18 13:48

Вы какой-то бред тут несете. В принципе, насколько нужны свои шаблоны сильно зависит от типа программы. В любом случае, общие use cases встречаются достаточно часто, и они должны решаться шаблонами. Я лично использовал очень сложное метапрограммирование на шаблонах в универе для написания базы данных, ибо альтернативой были бы тонны кода. Мои шаблоны свели пользовательский код до коротеньких элегантных функторов. Там же я сделал стримы-итераторы на шаблонах, где до этого без пяти минут доктора информатики писали ужасный километровый код. Как и во всем - надо знать, где и когда их применять. А переписывать стандартную библиотеку в любом случае маразм.

#88 
Van Doren коренной житель22.01.18 14:06
Van Doren
NEW 22.01.18 14:06 
в ответ zucchero 22.01.18 13:29, Последний раз изменено 22.01.18 14:10 (Van Doren)
Ещё вопрос:Вы сказали, с++ очень узко используется.В каких именно? Где на практике,для чего?

Можете сами полистать. https://www.gulp.de/gulp2/projekte/suche?0&scope=projects&...

В основном имхо embedded. Или вот ещё https://stackoverflow.com/jobs?sort=y&q=c++&l=Germany&...


#89 
  ilghiz постоялец22.01.18 14:18
NEW 22.01.18 14:18 
в ответ zucchero 22.01.18 13:29, Последний раз изменено 22.01.18 14:29 (ilghiz)

> Скажите,Van Doren, вы верите(или отчасти),в то что было указано в статье Ilghiz?

вообще ходит мнение, что Страустрап такое не говорил, но первого января и не такое можно было сказать :)


Я лично считаю, что если пользоваться С++ адекватно и с жесткой цензурой, то получается очень аккуратно написанный и читаемый код, но если в команде много говнокодеров и руководство проекта не контролирует разработку, то получается так, что проект пишется и поддерживается только той же командой, которая это и писала.


Расскажу забавную историю. В 1993 году зная и, уже много используя С++, пришел в фирму устраиваться на работу. Далее Ш - шеф, Я - это я.

Ш: у нас все на фортране,

Я: фу, это старый язык, я знаю С++,

Ш: мне надо пермутировать 7-мерный массив, если твоя программа на С++ будет работать хотя бы также быстро, как моя на фортране и поместится хотя бы в 20 строк, то ты будешь писать на С++, иначе - переучиваешься.

Итого: да, я переучился и стал писать на фортране, так как фортрановская версия была раз так 10 быстрее, и в 3 раза короче по числу строк и конечно же прозрачнее в восприятии.


То, что было в фортране в 70-ых и появилось с стандарте С 99 года, наконец-то появилось с С++ только в 14 стандарте (2014), до этого работать адекватно с разбивкой куска памяти на многомерный массив можно было или через какое-то место (то бишь указатели на указатели) в ущерб производительности, или разрисовывая индексы вручную.


То есть я к чему, и на С, и даже на ООП Фортране можно писать большие и успешные программы. На С++ очень много возможностей и нужен внутренний стержень, чтоб не стать говнокодером, чтоб потом вами написанный код никто не смог прочитать и поддерживать. В то же время, современный С++ 14 стандарта позволяет ИМХО писать наиболее лаконичные, читаемые, и одновременно наиболее оптимальные с точки зрения производительности программы.

#90 
Simple Nothing is f*cked22.01.18 14:22
Simple
NEW 22.01.18 14:22 
в ответ moose 22.01.18 13:48
вы имеете ввиду без создания своих, или без использования? если второе, то очень вряд ли : )

Как, так и.

Например, я сижу на легаси-проекте, в котором никаких генериков не было до моего прихода.

А я постоянно пишу классы с генериками для своих нужд. И на С++ писал (причем не тривиальные, а с выведением типов, если я правильно понимаю термин), на что у коллег начинался лютый батхерт, потому что как с++ они толком не знали и разбираться не хотели - мол, и так сойдет. В их понимании я усложнял, а я считал, что упрощал.

#91 
Simple Nothing is f*cked22.01.18 14:26
Simple
NEW 22.01.18 14:26 
в ответ ilghiz 22.01.18 14:18, Последний раз изменено 22.01.18 14:27 (Simple)
если в команде много говнокодеров и руководство проекта не контролирует разработку, то получается так, что проект пишется и поддерживается только той же командой, которая это и писала.

Вот в такое я и вляпался в своей второй фирме. Пришел 2 января в офис, открыл код и чуть не ох...л. Носителей ноухау уже давно не было, и слава богу - убил бы :-D Хорошая школа жизни оказалась. Квинтэссенция - "я могу все".

В теперешней примерно то же получилось с джава-проектом, но джава - это джава, тулзы на порядок лучше.

#92 
Van Doren коренной житель22.01.18 14:30
Van Doren
NEW 22.01.18 14:30 
в ответ Simple 22.01.18 14:26
Носителей ноухау уже давно не было, и слава богу - убил бы :-D

«Всегда кодируй так, будто парень, который будет поддерживать твой код — необузданный психопат, и он знает, где ты живёшь» 🤣

#93 
Simple Nothing is f*cked22.01.18 14:32
Simple
NEW 22.01.18 14:32 
в ответ Van Doren 22.01.18 14:30

Да уж. Что в коде, что в спортзале за собой убираю :)

#94 
  ilghiz постоялец22.01.18 15:28
NEW 22.01.18 15:28 
в ответ zucchero 21.01.18 23:55

Я-то решал и решу, а вот начинающим блондинкам сложнее решить будет ... улыб

#95 
  zucchero гость22.01.18 18:28
NEW 22.01.18 18:28 
в ответ ilghiz 22.01.18 15:28

Ну ты даешь!!! И про гов....кодера тоже умора, впервые слышу....

#96 
  ilghiz постоялец22.01.18 19:21
NEW 22.01.18 19:21 
в ответ zucchero 22.01.18 18:28

Мы хоть и одного с Вами возраста, но разве уже на "ты"? Я очень даже "милых дам" приветствую в IT. У меня самого дочки - 9 и 11 лет - этим делом очень даже интересуются. Именно в этом возрасте надо детей учить программировать на С. Вот в декабре - дочки командно выиграли 2 диплом по Германии по информатике в хаупт-лиге, это где и оберштуфа участвует. Задачки они решали именно на языке С, хотя организаторы олимпиады рекомендуют решать на жабе с питоном - и вместо тысяч строк на этом говнокоде, как у многих, получилось по 40 строк на задачку на С - и 2 место в хаупт-лиге плюс приглашение на воркшоп по ИИ в феврале. Поэтому хоть и мозги у женщин больше к параллелизму склонны, лучше бы поторопиться, ведь молодняк скоро на пятки будет наступать.

#97 
Van Doren коренной житель22.01.18 19:30
Van Doren
NEW 22.01.18 19:30 
в ответ ilghiz 22.01.18 19:21
хотя организаторы олимпиады рекомендуют решать на жабе с питоном - и вместо тысяч строк на этом говнокоде

На питоне как раз часто можно очень компактный код писать. Хотя я всегда пишу соревновательные задачи на С++. Вот пример для питона: https://code.google.com/codejam/contest/8294486/dashboard#...

решение на питоне:

def solve(N,R,O,Y,G,B,V):
    if max(R,Y,B) > sum([R,Y,B])-max(R,Y,B): return "IMPOSSIBLE"
    if R==max(R,Y,B): return "RYB"*(Y+B-R)+"RY"*(R-B)+"RB"*(R-Y)
    if Y==max(R,Y,B): return "YRB"*(R+B-Y)+"YR"*(Y-B)+"YB"*(Y-R)
    if B==max(R,Y,B): return "BRY"*(Y+R-B)+"BR"*(B-Y)+"BY"*(B-R)

testcase = input()
for i in range(testcase):
    N,R,O,Y,G,B,V = map(int,raw_input().split())
    print "Case #"+str(i+1)+":",solve(N,R,O,Y,G,B,V)

#98 
  zucchero гость22.01.18 20:12
NEW 22.01.18 20:12 
в ответ ilghiz 22.01.18 19:21, Последний раз изменено 22.01.18 20:49 (zucchero)

Ни в коем случае не хотела умолить Ваших достоинств.По старой итальянской привычке вырвалось:там не принято на Вы,кто жил много лет в Италии может подтвердить.Приехав сюда,не раз приходилось краснеть. Ещё раз sorry...

P.s почему-то мне показалось что Вы совсем ещё юный парень...

#99 
  ilghiz постоялец22.01.18 20:59
NEW 22.01.18 20:59 
в ответ zucchero 22.01.18 20:12

Меня уже сложно чем-то обидеть или чем-то "умалить". Просто как-то режет слух, когда в одной ветке, Вы только ко мне решили так обратиться, хотя на этом форуме еще совсем недавно. Желаю Вам удачи!

1 2 3 4 5 6 все