Как я могу сместить элементы в контейнере STL

Если вы используете балансировщик нагрузки, вы должны сохранять сессию централизованной для доступа через несколько серверов. Поэтому используйте драйвер сессии как базу данных вместо файла и выполняйте связанную миграцию. См. здесь .

6
задан Serik 20 January 2009 в 09:31
поделиться

2 ответа

Можно записать собственную функцию смещения. Вот простой:

#include <iterator>
#include <algorithm>

template <typename Container, typename ValueType, typename Distance>
void shift(Container &c, const ValueType &value, Distance shifting)
{
    typedef typename Container::iterator Iter;

    // Here I assumed that you shift elements denoted by their values;
    // if you have their indexes, you can use advance
    Iter it = find(c.begin(), c.end(), value);
    Iter tmp = it;

    advance(it, shifting);

    c.erase(tmp);

    c.insert(it, 1, value);
}

Можно затем использовать его как этот:

vector<int> v;
// fill vector to, say, {1,2,3,4,5}
shift(v, 4, -2); // v = {1,4,2,3,5}
shift(v, 3, 1); // v = {1,4,2,5,3}

Это - наивная реализация, потому что при смещении нескольких элементов, find будет выполнять итерации много раз в начале контейнера. Кроме того, это предполагает, что каждый элемент уникален, который не мог бы иметь место. Однако я надеюсь, что это дало Вам некоторые подсказки, как реализовать то, в чем Вы нуждаетесь.

3
ответ дан 17 December 2019 в 18:20
поделиться

Разве Вы не можете сделать простой вставки и затем стереться?

Не забывайте лишение законной силы любых итераторов, которые обращаются к элементам выше удаления или точки вставки, какой бы ни является самым низким.

HTH

удачи,

Ограбить

0
ответ дан 17 December 2019 в 18:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: