Быстрый способ удаления элемента из массива типа std::vector (C/C++) или ArrayList (Java)

Давно известный прием, но вдруг кто-то не знает: если вам не важен порядок элементов в массиве, то удалить объект из середины массива элементарно — извлекаете последний элемент массива и вставляете его на место удаляемого.

Вот простой код для демонстрации:

#include <vector>
#include <stdio.h>
 
template <class T>
void remove_item( std::vector<T> &v, int i )
{
    // Сохраняем последний элемент
    const T item = v.back();
    // Удаляем последний элемент из массива
    v.pop_back();
    // Вставляем сохраненный элемента вместо элемента с индексом i
    v[i] = item;
}
 
 
int main()
{
    std::vector<int> v;
    v.push_back(10);
    v.push_back(11);
    v.push_back(12);
    v.push_back(13);
    v.push_back(14);
 
    printf("before:\n");
    for (int i = 0, count = v.size(); i < count; ++i)
    {
        printf("v[%d] = %d\n", i, v[i]);
    }
 
    remove_item(v, 1);
 
    printf("after:\n");
    for (int i = 0, count = v.size(); i < count; ++i)
    {
        printf("v[%d] = %d\n", i, v[i]);
    }
}

Вывод:

before:
v[0] = 10
v[1] = 11
v[2] = 12
v[3] = 13
v[4] = 14
after:
v[0] = 10
v[1] = 14
v[2] = 12
v[3] = 13

Обратите внимание, что в remove_item() происходит копирование последнего элемента. Так что если у вас что-то сложнее простых int, long, char или float, то этот код вам надо переписать.

Код для ArrayList (Java). Не проверял, но идея понятна:

public class ArrayListUtil {
    public static <T> void removeItem(ArrayList<T> v, int index) {
        T item = v.get(v.size() - 1);
        v.remove(v.size() - 1);
        v.set(index, item);
    }
 
    private ArrayListUtil {
    }
}

Советую вам использовать стандартные функции std::remove() и std::remove_if(), которые делают практически тоже самое и std::vector::erase(), подробнее можно ознакомиться по ссылке.

Zyxel Keenetic и интернет от «Билайн»

На днях подключился к интернету от «Билайн». В интернет хожу через роутер Zyxel Keenetic, о котором я уже писал. Промучился с настройкой роутера не один день. В итоге родилась эта инструкция:

Физический сброс настроек

Нажать кнопку RESET на задней панели и держать ее, пока индикатор питания не начнет часто моргать.

Настройка подключения (Интернет->Подключение)

Настройка параметров IP: Автоматическая
Получать адреса серверов DNS автоматически: включаем галочку
Использовать MAC-адрес: По умолчанию

Настройка авторизации (Интернет->Авторизация)

Протокол доступа в Интернет: L2TP
Адрес сервера: tp.internet.beeline.ru
Имя пользователя: <ваш логин>
Пароль: <ваш пароль>
Метод проверки пользователя: Автоопределение
Безопасность данных (MPPE): Не используется

Главный пункт настройки — сбросить настройки роутера. Без этого у меня не завелось, хотя прошивка последняя стоит (BFW.4.4) и вроде опыт настройки таких девайсов чуть ли не восемь лет уже.

Деревянная избушка без единого гвоздя

Собрали избушку без единого гвоздя и клея. Хотели взять мельницу, а получилась избушка. Производитель — ПКФ «СТРУГЪ». Слегка кривовата, но в целом интересно. Рекомендую. Цена избушки 720 рублей.

Деревянная избушка

Процесс сборки очень простой: собираете пол и стены за десять минут. Потом оказывается, что надо было читать инструкцию. Разбираете всю конструкцию и собираете заново.

Деревянная избушка

Инструкция располагается на коробке, внутри коробки можно найти листочек с размерами и количеством деталей. Перед сборкой возьмите линейку и измерьте детали. Потому что, например, половая доска имеет более другую длину, чем доска для крыши. А дом оказывается не квадратный, а прямоугольный.

Коробка от конструктора

Настройка чата ICQ и MSN на Nokia N9

Устанавливаем приложение «Экстраплагины учетных записей» из магазина.

Nokia N9. Экстраплагины учетных записей

После установки нужен перезапуск мобильника (выключить и включить).

После перезагрузки телефона запускаем «Уч. записи»

Nokia N9. Учетные записи

Затем «Добавить» (во время настройки телефон безбожно тормозит, это пока не лечится — просто наберитесь терпения):

ICQ

Название — любое
UIN учетной записи — ваш номер ICQ
Пароль — ваш пароль

Nokia N9. ICQ

MSN

Название — любое
Адрес электронной почты — ваша почта
Пароль — ваш пароль

Nokia N9. Windows Messenger

Замеченные ошибки

ICQ не хотел подключаться с правильными данными. Лечится просто — удаляем аккаунт ICQ с мобильника и делаем его заново.

Подсказка

Клавиатуру можно убрать движение пальца от верхнего края клавиатуры до нижнего (иначе кнопка «Вход» не будет видна).

Электронные мед. карты в поликлинике. Нескорое будущее.

Сидел тут на днях в поликлинике в долгой очереди к врачу. Держал в руках свою медицинскую карточку. Ну, знаете, такой ворох бумажек, склеенных канцелярским клеем.

Вспомнилась история, прочитанная в далеком 1999 году в фидо про хакера, который взламывал истории болезней в российских больницах. Народ, помнится, еще глумливо хихикал на тему того, что эту историю написал какой-то недоумок, который про нашу страну ничего не знает и думает, что здесь больницы американского типа из сериала «Скорая помощь».

Так вот с тех давних пор ничего у нас не изменилось. А знаете почему? Смотрите фото свеже-вклеенного листочка в моей карточке:
Старинная медицинская карточка
Обратите внимание на дату печати этого листочка — 1986 (прописью: одна тысяча девятьсот восемьдесят шестой) год. Прошло уже 26 (прописью: двадцать шесть) лет, а листочки еще не кончились! Кто-нибудь, закройте уже этот грёбанный склад древних желтых бумажек (горшочек не вари!). Может тогда мы наконец-то перейдем на электронную систему ведения истории болезни?

Блог Евгения Жирнова