Станд.:: отобразитесь + станд.:: tr1:: связать + стандартные стоящие алгоритмы?

Вы сконфигурировали Реестр схемы для поиска брокера Kafka на kafka:9092, но вы также настроили брокера Kafka для объявления его адреса как localhost:9092.

Я не знаком конкретно с Kubernetes, но в этой статье описывается, как обрабатывать сетевые конфигурации в принципе при использовании контейнеров, IaaS и т. Д.

7
задан Community 23 May 2017 в 10:33
поделиться

6 ответов

Ясность всегда бьется умный. Сделайте то, что можно считать позже.

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

11
ответ дан 6 December 2019 в 06:51
поделиться

Первое так же читаемо и удобно в сопровождении как второе - если Вы знаете что bind делает. Я работал с Повышением:: Свяжите (чрезвычайно идентичный std::tr1::bind) достаточно долго то, что я не испытываю затруднений из-за него.

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

5
ответ дан 6 December 2019 в 06:51
поделиться

Я говорю, идут для 2)

Для улучшения производительности Вы могли добраться m.end() из цикла и резерва пространство в векторе.

Не могу ждать C++ 0x и основанное на диапазоне для цикла; это сделало бы Ваш цикл еще лучше.

3
ответ дан 6 December 2019 в 06:51
поделиться

Вы забыли using namespace std::tr1::placeholders :P

Честно говоря, для простых алгоритмов как это последний код, вероятно, легче поддержать. Но я на самом деле склоняюсь для первого (особенно, когда C++ 1x дает нам лямбды!), потому что это подчеркивает функциональный стиль программирования, которое я лично предпочитаю обязательному стилю использования цикла.

Это - действительно другая вещь штрихов; стандартные алгоритмы являются самыми полезными, когда они или сложны или универсальны, и это не ни один.

Вот то, на что это будет похоже с лямбдами:

std::transform(m.begin(), m.end(), std::back_insterter(v),
               [](MyMap::value_type pair){ return pair.first; }
              );

И на самом деле, существует другой подход, который я предпочел бы, но для его многословия:

using std::tr1::bind;
using std::tr1::placeholders::_1;
std::for_each(m.begin(), m.end(),
              bind(&std::vector<int>::push_back, v,
                   bind(&MyMap::value_type::first, _1)
                  )
             );

И с лямбдами (это является, вероятно, в общем и целом самым опрятным и самым явным из всех опций):

std::for_each(m.begin(), m.end(),
              [&v](MyMap::value_type pair){v.push_back(pair.first);}
             );
4
ответ дан 6 December 2019 в 06:51
поделиться

Пойдите с опцией № 1, посмотрите Scott Meyers, Эффективный Объект STL № 43, страница 181.

1
ответ дан 6 December 2019 в 06:51
поделиться

Когда я вчера посмотрел на Ваш вопрос, это не было связывание (который я использую много), который вынудил меня посмотреть дважды для понимания кода, но карты:: value_type:: сначала, который у меня не было случая для использования очень часто. Пока я соглашаюсь, что "Ясность всегда бьется умный", знакомство требуется, прежде чем ясность и Вы не собираетесь знакомиться со стилями, которые Вы не используете...

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

1
ответ дан 6 December 2019 в 06:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: