Я недавно начал использовать лямбду повышения и думал, что попытался бы использовать ее в местах, где это/должно, делают вещи легче читать.
У меня есть некоторый код, подобный следующему
std::vector< X * > v;
for ( int i = 0 ; i < 20 ; ++i )
v.push_back( new X() );
и позже, для удаления его...
std::for_each( v.begin(), v.end(), boost::lamda::delete_ptr() );
Который аккуратно убирается.
Однако я думал, что буду делать попытку "лямбды-ising" население вектора с помощью лямбды... Это - затем запущенные фейерверки...
Я попробовал..
std::generate_n( v.begin(), 20, _1 = new X() );
но это бросило все виды ошибок компилятора.
Любые идеи, который является лучшей "лямбдой" способ достигнуть этого.
Спасибо Mark.
Вероятно, нет специальной магии MVC, которая делает это возможным.
Уверен:
if( HttpContext.Current.Request.Path == "some some menu url" )
или
if( ViewContext_Or_ControllerContext.RouteData.Values["controller"] == "some value")
используется где-то.
Этот код можно разместить примерно в трех различных местоположениях (View (.aspx), ViewModel, Custom StartHelper), и для всех них потребуется один и тот же бит кода.
-121--3181300-Это пример создания гистограммы (или таблицы частот в других словах), в которой можно ознакомиться с подробностями обработки изображения.
Но моя главная рекомендация - не использовать RGB (если веб-сайт, на который вы смотрите, не имеет в основном простых цветов), а использовать HSB вместо этого. Компонент «H» (оттенок) даст вам лучшую индикацию используемых цветов независимо от того, насколько они яркие или темные.
-121--3279282-Вот фрагмент кода, который делает то, что вы хотите:
#include <algorithm>
#include <vector>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/construct.hpp>
typedef int X;
int main() {
std::vector<X*> v;
std::generate_n( std::back_inserter(v), 20, boost::lambda::new_ptr<X>() );
std::for_each( v.begin(), v.end(), boost::lambda::delete_ptr() );
}
Вы можете рассмотреть возможность использования boost::ptr_vector, хотя, как использование std:: вектор с динамически выделенными указателями в исключительном безопасном способе не так просто.
Не могу помочь тебе с лямбда, но ты посмотрел на библиотеку boost::assign?
Хорошо, после дополнительной игры я придумал это...
std::generate_n( std::back_insert_iterator< std::vector< X* > >( ip ), 20, new_ptr< X >() ) );
Я не уверен, что это так элегантно. С точки зрения программирования, может быть, и элегантно, но с точки зрения перспектив "через 6 месяцев-время-я-знаю-что-что-значит-что-бы-делать", я не уверен...
Не стесняйтесь указывать лучшие способы сделать это.
Вы можете рассмотреть:
static const int PtrVectorSize = 20;
// ....
v.resize(PtrVectorSize);
generate_n(v.begin(), PtrVectorSize, new_ptr<X>());
также, вы можете использовать BOOST :: PTR_VECTOR и сохранить себя удалением.