Вариант1. вы можете использовать AlertifyJS , это полезно для предупреждения
Option2. вы запускаете или просто присоединяетесь к проекту на основе web-приложений, дизайн интерфейса, возможно, хорош. В противном случае это должно быть изменено. Для приложений Web 2.0 вы будете работать с динамическим содержимым, множеством эффектов и другими материалами. Все это прекрасно, но никто не задумывался над тем, чтобы создать JavaScript-оповещение и подтвердить флажки. Вот как они
создают простое имя js-файла jsConfirmStyle.js. Вот простой js-код
ie5=(document.getElementById&&document.all&&document.styleSheets)?1:0;
nn6=(document.getElementById&&!document.all)?1:0;
xConfirmStart=800;
yConfirmStart=100;
if(ie5||nn6) {
if(ie5) cs=2,th=30;
else cs=0,th=20;
document.write(
""+
""+
" "+
" "+
""+
""+
" "+
""+
" "+
"
"+
""
);
}
document.write("");
function leftJsConfirm() {
document.getElementById('jsconfirm').style.top=-1000;
document.location.href=leftJsConfirmUri;
}
function rightJsConfirm() {
document.getElementById('jsconfirm').style.top=-1000;
document.location.href=rightJsConfirmUri;
}
function confirmAlternative() {
if(confirm("Scipt requieres a better browser!")) document.location.href="http://www.mozilla.org";
}
leftJsConfirmUri = '';
rightJsConfirmUri = '';
/**
* Show the message/confirm box
*/
function showConfirm(confirmtitle,confirmcontent,confirmlefttext,confirmlefturi,confirmrighttext,confirmrighturi) {
document.getElementById("jsconfirmtitle").innerHTML=confirmtitle;
document.getElementById("jsconfirmcontent").innerHTML=confirmcontent;
document.getElementById("jsconfirmleft").value=confirmlefttext;
document.getElementById("jsconfirmright").value=confirmrighttext;
leftJsConfirmUri=confirmlefturi;
rightJsConfirmUri=confirmrighturi;
xConfirm=xConfirmStart, yConfirm=yConfirmStart;
if(ie5) {
document.getElementById("jsconfirm").style.left='25%';
document.getElementById("jsconfirm").style.top='35%';
}
else if(nn6) {
document.getElementById("jsconfirm").style.top='25%';
document.getElementById("jsconfirm").style.left='35%';
}
else confirmAlternative();
}
Создайте простой html-файл
jsConfirmSyle
std::transform(myv1.begin(), myv1.end(), myv1.begin(),
[](double d) -> double { return d * 3; });
Просто сделайте, как говорит Дарио:
for_each(begin(myv1), end(myv1), [](double& a) { a *= 3; });
for_each
разрешено изменять элементы, говоря, что это не может быть мифом.
Используя изменяемый подход, мы можем использовать for_each
для непосредственного обновления элементов последовательности посредством ссылок.
for_each(begin(myv1), end(myv1), [](double& a) { a *= 3; });
for_each
модифицировать элементы, как это называется «неизменяющим» алгоритмом. Это означает, что for_each
не разрешается изменять последовательность , на которой он работает (что относится к изменениям структуры последовательности - то есть делает недействительными итераторы). Это не означает, что мы не можем модифицировать неконстантные элементы вектора как обычно - сама структура не затрагивается этими операциями.
Вот так:
vector<double> myv1;
transform(myv1.begin(), myv1.end(), myv1.begin(), [](double v)
{
return v*3.0;
});
Основной первоначальной мотивацией для использования этого функционального стиля для этих случаев в C ++ было «aaagh! Iterator loops!», А C ++ 0x удаляет эту мотивацию с помощью оператора for, основанного на диапазоне. Я знаю, что часть вопроса заключалась в том, чтобы выяснить синтаксис лямбды, но я думаю, что ответ на вопрос «Как это делается в C ++ 0x?» is:
for(double &a : myv1) { a *= 3; }
Там нет реального функционального объекта, но если это поможет, вы можете притвориться, что { a *= 3; }
- это очень сокращенная лямбда. Что касается удобства использования, то в любом случае это равносильно тому же, хотя проект стандарта определяет диапазон на основе эквивалентного цикла for
.
Я использую VS2012, который поддерживает адаптер привязки C ++ 11. Чтобы связать первый элемент двоичной функции (как это делает использование bind1st), вам нужно добавить _1 (аргумент-заполнитель). Нужно включить функционал для привязки.
using namespace std::placeholders;
std::transform( myv1.begin(), myv1.end(), myv1.begin(),
std::bind( std::multiplies<double>(),3,_1));