Страницы

Поиск по вопросам

среда, 27 февраля 2019 г.

Оператор & в функциях и const

Немного подзабыл C++ , а может просто раньше и не сталкивался с этим, но на вид всё очень легко. Просто прошу напомнить следующее (можно в кратце, я всё понимаю, но вспомнить не могу, а гугл не воспринимает символ & в поисковой строке): const после метода, насколько я знаю, означает защиту значений *this, а что значит const перед методом? Что значит оператор "&" в шаблонном типе? Это ведь оператор взятия адреса, здесь он причем? Правильно ли я понял, что "=0" в конце означает, что это pure метод? Если так, то зачем ему реализация в данном классе, если этот класс абстрактный, а сам метод будет переопределен в дочерних классах? Или я что-то путаю? Не люблю код, в котором опущены кавычки, вот и запутался... Заранее спасибо! Вот, кстати, и сам код :) template < class UnknownType > class MyClass { public: virtual const UnknownType& method() const throw () = 0; };


Ответ

всё просто UnknownType& это тип: ссылка на UnknownType а const для того чтобы нельзя было изменить то что возвращается да это pure метод, вот только вы не показали что там есть реализация

Возможно ли создание ЧПУ?

Возможно ли создание ЧПУ на пхп(связь с БД) без внесения изменении в htaccess? Есть примеры?


Ответ

Вообще без .htaccess практически не возможно. Исключение - вы сконфигурируете свой сервер соответствующим способом. Хотя не думаю, что это легкий выход из положения. А вот избежать лишней головной боли с mod_rewrite можно. Я уже говорил тут об этом, но не могу найти этот пост, поэтому вкратце повторюсь. Создается правило, с помощью которого все запросы перенаправляются на морду, если директории или файла не существует физически на сервере. Например, так: RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L] Теперь, вы ловите такие запросы в php: $request = $_SERVER['REQUEST_URI']; Разбираете полученную строку "на запчасти": по слешу для определения основных частей URI, учитывая окончание, если допустим адрес может быть /some_path/page.html и в зависимости от полученных данных, выводите ту или иную информацию.

Поиск перекрестных совпадений с помощью регулярных выражений

Добрый вечер. Понимаю, что вопрос очень глупый, но голова уже не варит. Да, начинается время зачетов :) Для N-ной лабы по матстату нужно посчитать количество вхождений подстроки в строку. Банальщина. Чтобы эту банальщину хоть как-то приукрасить, пишем extension method для string: public static int P(this string baseStr, string inputStr) { return new Regex(inputStr).Matches(baseStr).Count; } Для справки - в задании строка из N 0 и 1, первым этапом надо посчитать вероятности появления пар в строке. Собственно, мой глупый вопрос: почему описанный метод, вызванный от строки "1111" возвращает 2? Ну не могут же регулярки последовательно считать... UPD: пример вызова метода: string data = "1111"; Console.WriteLine(data.P("11")); //2


Ответ

Всё верно: в строке 1111 всего два вхождения подстроки 11. Регулярные выражения анализируют текст слева направо. При совпадении внутренний "курсор" (индекс) устанавливается на его начальную позицию. Следущее совпадение система начинает искать с позиции, находящейся сразу после текущего совпадения. Таким образом, перекрёстные совпадения невозможны при использовании обычных шаблонов.
Как верно заметил ReinRaus, необходимо воспользоваться механизмом опережающей проверки, т.е. конструкцией (?=...), которая используется для проверки того, что следует после текущей позиции в строке. Несмотря на то, что такие блоки не "поглощают" текст при совпадении (т.е. при нахождении подстроки индекс остаётся на прежнем месте во входной строке), внутри них возможно использование захватывающих подмасок типа (...)
Тут мы подходим к решению проблемы:
string data = "1111"; string sub = "11"; Console.WriteLine(data.P(string.Format("(?=({0}))", Regex.Escape(sub)));
Здесь пример использования данного подхода

Как сделать визуализатор аудио на js?

Надо сделать визуализатор музыки: столбцы, высота которых бы менялась в зависимости от частоты. Как это сделать на js?


Ответ

Да тут вообще много всего понаписано. Попробуйте например dancer.js, даже есть по настоящему красивые результаты
Можете посмотреть здесь куча рекомендаций

Алгоритм нарезки прямоугольника на равные меньшие прямоугольники

Дан исходный прямоугольник N×M. Задача: определить сколько раз можно полностью "уложить" (ориентация любая) меньший прямоугольник n×m в исходный. Возможно, для будущих ходоков будет интересно КАК. Спасибо.


Ответ

Задачка решается просто. Если нужен ответ на вопрос КАК // Возвращает массив расположения блоков [ { x, y, w, h } ] function calc(W, H, w, h) {
var hor = pack([], W, H, w, h, 0, 0); var ver = pack([], W, H, h, w, 0, 0);
// сортировка блоков в порядке сверху-вниз, слева-направо // если не планируется нумеровать блоки - можно удалить return (hor.length >= ver.length ? hor : ver).sort(function(a, b) { return (a.y - b.y) || (a.x - b.x); });
function pack(pieces, W, H, w, h, x0, y0) { var x, y; var nx = W / w | 0; // число блоков, умещающееся по ширине var ny = H / h | 0; // по высоте var n = nx * ny; // всего for (y = 0; y < ny; y++) for (x = 0; x < nx; x++) { pieces.push({ x: x0 + x*w, y: y0 + y*h, w: w, h: h }); } if (W % w >= h && H >= w) { // осталось полезное место справа pack(pieces, W % w, H, h, w, x0 + nx*w, 0); } else if (H % h >= w && W >= h) { // осталось полезное место снизу pack(pieces, W, H % h, h, w, 0, y0 + ny*h); } return pieces; }
} Если нужен ответ на вопрос СКОЛЬКО // Возвращает число блоков function calc(W, H, w, h) {
return Math.max(pack(W, H, w, h), pack(W, H, h, w));
function pack(W, H, w, h) { var n = (W / w | 0) * (H / h | 0); if (W % w >= h && H >= w) { n += pack(W % w, H, h, w); } else if (H % h >= w && W >= h) { n += pack(W, H % h, h, w); } return n; }
} Демо: http://jsfiddle.net/RHq23/

Применить функцию ко всем дивам в блоке

Сразу скажу чтобы в дальнейшем не было вопросов. Вроде "А что так уже не делают?!, разве нельзя просто сделать вот так?! и т.д". В js я полный нуб. И естественно сформировать свой вопрос я не могу(Так сам бы нагуглил)
В чем весь сабж. Есть код
$(document).ready(function() { var margin = $("#image1").width() / 2; var width = $("#image1").width(); var height = $("#image1").height(); $("#image2").stop().css({ width: '0px', height: '' + height + 'px', marginLeft: '' + margin + 'px', opacity: '0.5' }); $("#reflection2").stop().css({ width: '0px', height: '' + height + 'px', marginLeft: '' + margin + 'px' }); $("#image1").mouseover(function() { $(this).stop().animate({ width: '0px', height: '' + height + 'px', marginLeft: '' + margin + 'px', opacity: '0.5' }, { duration: 500 }); window.setTimeout(function() { $("#image2").stop().animate({ width: '' + width + 'px', height: '' + height + 'px', marginLeft: '0px', opacity: '1' }, { duration: 500 }); }, 500); }); $("#image2").mouseout(function() { $(this).stop().animate({ width: '0px', height: '' + height + 'px', marginLeft: '' + margin + 'px', opacity: '0.5' }, { duration: 500 }); window.setTimeout(function() { $("#image1").stop().animate({ width: '' + width + 'px', height: '' + height + 'px', marginLeft: '0px', opacity: '1' }, { duration: 500 }); }, 500); }); });


Сейчас все эффекты применяются только к первому диву vizitka(ко внутренним изображениям). А таких дивов на странице несколько. Как сделать, что бы функция применялась к каждому image1,image2 Которые лежат в vizitka. Я думаю нужно id поменять на класс...НО нужно что-то еще. Все мои попытки оказались тщетными(


Ответ

Пробуйте var doNicely = function (this_) { var $imgs = $('img', this_), $img1 = imgs.eq(0), $img2 = imgs.eq(1);
var margin =$($img1).width()/2; var width=$($img1).width(); var height=$($img1).height();
$($img2) .stop() .css({width:'0px',height:''+height+'px',marginLeft:''+margin+'px',opacity:'0.5'});
$("#reflection2") .stop() .css({width:'0px',height:''+height+'px',marginLeft:''+margin+'px'});
$($img1).mouseover(function(){ $(this) .stop() .animate({width:'0px',height:''+height+'px',marginLeft:''+margin+'px',opacity:'0.5'},{duration:500}); window.setTimeout(function() { $($img2) .stop().animate({width:''+width+'px',height:''+height+'px',marginLeft:'0px',opacity:'1'},{duration:500}); },500); }); $($img2).mouseout(function(){ $(this) .stop() .animate({width:'0px',height:''+height+'px',marginLeft:''+margin+'px',opacity:'0.5'},{duration:500}); window.setTimeout(function() { $($img1) .stop() .animate({width:''+width+'px',height:''+height+'px',marginLeft:'0px',opacity:'1'},{duration:500}); },500); }); }
$(document).ready(function () { $('.vizitka').click(function () { doNicely(this); }); });

Завис Sublime Text 3 при работе с внушительным php файлом при сохранении

Собственно, вопрос, что делать? Кто виноват — понятно. Есть ли возможность спасти скрипт? Может, у Сублайма есть местечко, куда он сохраняет временные файлы? Или другие варианты? ОС — Ubuntu 14.04.


Ответ

Вопрос решился. Сперва полез смотреть где бы subl мог хранить сессии. Обнаружил их в домашней папке пользователя в каталоге /home/user/.config/sublime-text-3/local. В файле *.sublime_session. Открываю и вижу JSON массив. И, о чудо, вижу знакомый код. Правда идет он одной строкой и символы конца строки проставлены как /n. Отлично, скопировав, решил уйти в ребут, т.к. субл намертво завис и закрываться не хотел даже через htop. После ребута открыл subl и случилось самое величайшее во всей этой истории - последний экземпляр кода висел как несохраненная вкладка. Спасибо команде Sublime! Обновление Ах и еще вот что https://github.com/akalongman/sublimetext-autobackups. Замечательный антисединный плагин.