Как указано в комментариях, copy_n
небезопасно для этой работы, но вы можете использовать copy_if
с изменяемой лямбдой:
#include
#include
#include
#include
int main(){
const int N = 10;
std::vector v;
//optionally v.reserve(N);
std::copy_if(
std::istream_iterator(std::cin),
std::istream_iterator(),
std::back_inserter(v),
[count=N] (int) mutable {
return count && count--;
});
return 0;
}
как указано в этом ответе: std :: скопировать n элементов или до конца
Я поместил его в сессию.
Это будет самым надежным и даже если они не пойдут прямо "назад", то это будет все еще иметь их параметры поиска там. Помещение его в cookie также работало бы, но не будет рекомендоваться, если это не очень маленькая форма.
Это до браузера, но в большинстве случаев Вы ничего не должны делать.
IE, Firefox, и т.д. будет счастливо помнить содержание формы в предыдущей странице и показывать его снова, когда Назад будет нажат..., пока Вы не делаете ничего для остановки той работы, такой как создание страницы, без кэшей или создание формы полностью из сценария.
(Помещающий материал в сессию, вероятно, перепутает браузеры с двумя вкладками, открытыми на той же форме. Будьте очень осторожны при выполнении чего-либо как этот.)
Проблема, которую Вы имеете, состоит в том, что браузер возвратит кэшированную версию страницы и вероятно не попросит у сервера его снова, означая, что использование сессии было бы не важно.
Вы могли однако использовать Ajax для загрузки деталей ранее отправленной формы на событии загрузки страницы.
Я полагаю, что Вы во власти браузера. Когда Вы защищаетесь, браузер не выполняет новый запрос к серверу для содержания, это использует кэш (почти в каждом браузере, который я видел так или иначе). Так что-либо серверная сторона отсутствует.
Я задаюсь вопросом, могли ли Вы сделать что-то очень сложное как хранение результата поиска в cookie во время onunload события страницы результатов и затем чтения cookie в JavaScript на странице результатов поиска и заполнении формы - но это - просто предположение, я не знаю, работало ли это.
Необходимо было бы в основном сохранить его на сервере в некотором роде (вероятно, в переменных сеанса, как предложено) после POST. Также необходимо установить JavaScript на странице формы для выполнения на загрузке для издавания приказа Ajax, чтобы получить данные из сервера (в, скажем, формате JSON) и предварительно заполнить поля формы данными.
Пример код jQuery:
$( document ).ready( function() {
$.getJSON(
"/getformdata.php",
function( data ) {
$.each( data.items, function(i,item) {
$( '#' + item.eid ).val( item.val );
} );
});
} );
Ваш/getformdata.php мог бы возвратить данные как:
{
'items': [
{
'eid': 'formfield1',
'val': 'John',
},
{
'eid': 'formfield2',
'val': 'Doe',
}
]
}
и это, очевидно, возвратило бы пустой массив, если бы не было ничего сохраненного еще для сессии. Вышеупомянутый код груб и не протестирован, но это должно дать Вам основную идею.
Как примечание стороны: текущие версии Opera и Firefox сохранят полевое содержание формы при возвращении. Ваш код JS перезапишет это, но это должно быть безопасно.
Другой ajaxy опции (таким образом, это не хорошо для пользователей без JavaScript) должен отправить форму с помощью JavaScript и затем пойти страница подтверждения (или показать сообщение на форме путем замены кнопки сообщением). Тем путем там не является никакая возможная "спина".
Почему бы не сохранить значения в cookie перед представлением? Вы могли также включать метку времени или маркер для указания, когда это было заполнено. Затем, когда страница загружается, можно определить, необходимо ли заполнить поля с данными из cookie или просто оставить их незаполненный, потому что это - новый поиск.
Вы могли также сделать все локальное JavaScript. Таким образом, Вы снабжаете cookie поисковым значением, и на pageload Вы проверяете, существует ли cookie. Что-то вроде этого:
$('#formSubmitButton').click( function() {
var value = $('#searchbox').val();
var days = 1;
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
document.cookie = "searchbox="+value+expires+"; path=/";
});
$(document).ready( function() {
var nameEQ = "searchbox=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) var valueC = c.substring(nameEQ.length,c.length);
}
$('#searchbox').val(valueC);
});
Не протестировали это, но, должен работать. Вам будет нужен jQuery для этого.
Функции cookie прибыли из: http://www.quirksmode.org/js/cookies.html
Я должен сказать, что btw, что и FireFox и IE имеют это поведение по умолчанию.