Что делает std :: remove do?
Вот псевдокод std::remove. Возьмите несколько секунд, чтобы узнать, что он делает, а затем прочитайте объяснение.
Iter remove(Iter start, Iter end, T val) {
Iter destination = start;
//loop through entire list
while(start != end) {
//skip element(s) to be removed
if (*start == val) {
start++;
}
else //retain rest of the elements
*destination++ = *start++;
}
//return the new end of the list
return destination;
}
Обратите внимание, что удаление просто перемещает элементы в последовательности, переписывая значения, которые вы хотите удалить. Значит, ценности, которые вы хотели удалить, действительно исчезли, но тогда в чем проблема? Скажем, у вас есть вектор со значениями {1, 2, 3, 4, 5}. После вызова remove для val = 3 вектор теперь имеет {1, 2, 4, 5, 5}. То есть 4 и 5 были перемещены вверх так, что 3 ушло от вектора, но размер вектора не изменился. Кроме того, конец вектора теперь содержит дополнительную левую над копией 5.
Что делает std :: remove do?
std::erase принимает начало и конец диапазона, который вы хотите избавиться. Не требуется размер вектора , который вы хотите удалить, только начало и конец диапазона. Вот псевдо-код для его работы:
erase(Iter first, Iter last)
{
//copy remaining elements from last
while (last != end())
*first++ = *last++;
//truncate vector
resize(first - begin());
}
Таким образом, операция стирания фактически изменяет размер контейнера и поэтому освобождает память.
Идиома remove-erase
Комбинация std::remove и std::erase позволяет удалить соответствующие элементы из контейнера, чтобы контейнер фактически усекался, если элементы были удалены. Вот как это сделать:
//first do the remove
auto removed = std::remove(vec.begin(), vec.end(), val);
//now truncate the vector
vec.erase(removed, vec.end());
Это известно как идиома удаления-стирания. Почему он спроектирован так? Понимание заключается в том, что операция поиска элементов является более общей и независимой от базового контейнера (зависит только от итераторов). Однако операция стирания зависит от того, как контейнер хранит память (например, у вас может быть связанный список вместо динамического массива). Таким образом, STL ожидает, что контейнеры будут выполнять свою собственную стирание, одновременно предоставляя общую операцию «удалить», чтобы все контейнеры не могли реализовать этот код. На мой взгляд, имя очень вводит в заблуждение, а std::remove должно было быть вызвано std::find_move.
Примечание: выше код строго псевдокод. Фактическая реализация STL более умна, например, используя std::move вместо копирования.
1) Если вы хотите перезагрузить один и тот же URL-адрес:
mWebView.loadUrl ("http: //www.websitehere.php");
, поэтому полный код будет
newButton.setOnClickListener (новый View.OnClickListener () {public void onClick (View v) {dgeActivity.this. mWebView.loadUrl ("http: //www.websitehere.php");}});
2) Вы также можете вызвать mWebView.reload ()
, но помните, что это отправляет страницу, если запрос был POST, поэтому работает только с GET. [ ! d5]
Почему бы не попробовать это?
Код Swift для вызова внутри класса:
self.mainFrame.reload ()
или внешний вызов
myWebV.mainFrame.reload ()
Лучшее решение - просто сделать webView.loadUrl ("javascript: window.location.reload (true)");
. Это должно работать на всех версиях и не вводить новые записи истории.
yourWebView.getSettings (). SetJavaScriptEnabled (true);
– Markus Rudel
15 August 2012 в 15:56
Вы можете вызвать mWebView.reload ();
Это то, что он делает
Да по какой-то причине WebView.reload () вызывает сбой, если раньше он не загружался (что-то связано с тем, как он обрабатывает историю). Это код, который я использую для обновления моего веб-представления. Я сохраняю текущий url в self.url
# 1: пауза и загрузка страницы self.timeout.pause () sleep (1) # 2: проверьте интернет-соединение (действительно ленивый способ), а self.page (). networkAccessManager (). networkAccessible () == QNetworkAccessManager.NotAccessible: sleep (2) # 3: Повторите попытку, если self.url == self.page (). mainFrame ( ) .url (): self.page (). action (QWebPage.Reload) self.timeout.resume (60) else: self.page (). action (QWebPage.Stop) self.page (). mainFrame (). load (self.url) self.timeout.resume (30) return False
попробуйте это:
mWebView.loadUrl (mWebView.getUrl (). toString ());
Это сработало для меня.
просто помещено в onCreate metode
Кнопка Button = (кнопка) findViewById (R.id.reload_btn); button.setOnClickListener (новый View.OnClickListener () {public void onClick (View v) {web.loadUrl ("javascript: window.location.reload (true)");}});
Это код, который может перезагрузить веб-сайт в webView
web.loadUrl ("javascript: window.location.reload (true)") ;
Обновление текущего URL веб-просмотра не является обычным явлением. Я использовал это в таком сценарии: Когда пользователь переходит к другому действию, и пользователь возвращается к действию веб-просмотра, я перезагружаю текущий URL-адрес следующим образом:
public class MyWebviewActivity extends Activity {WebView mWebView; .... .... .... @Override public void onRestart () {String url = mWebView.getUrl (); String postData = MyUtility.getOptionsDataForPOSTURL (mContext); mWebView.postUrl (url, EncodingUtils.getBytes (postData, "BASE64")); }}
Вы также можете использовать функцию reload ()
WebView. Но учтите, что если вы загрузили webview с помощью postUrl ()
, то mWebView.reload ();
не работает. Это также работает
String webUrl = webView.getUrl (); mWebView.loadUrl (webUrl);
webView.loadUrl (& quot; javascript: window.location.reload (true) & quot;);
это помогло мне, webview.reload не работал, но это нужно,yourWebView.getSettings (). setJavaScriptEnabled (true);
включен в настройках веб-просмотра – Ramakanth Putta 28 May 2018 в 02:21