Суть задачи следующая:
1. Имеем последовательность элементов в контейнере (контейнер с индексируемыми элементами). Для наглядности приведу примеры для QList<int>
2. Задано подмножество индексов в данной последовательности, которое надо перенести на требуемую позицию ("до" или "после")
Схематично можно представить как
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14) - исходная последовательность
----*-----*----*--^----*-------------------------- - * обозначены выбранные элементы ^ позиция, в которую нужно переместить выбранное подмножество
(0, 2, 4, 6, 1, 3, 5, 8, 7, 9, 10, 11, 12, 13, 14) - результат вставки "после" выбранной позиции
(0, 2, 4, 1, 3, 5, 8, 6, 7, 9, 10, 11, 12, 13, 14) - результат вставки "до" выбранной позиции
Подобная задача актуальна для drag and drop подмножества строк в одном и том же представлении.
Предлагайте варианты решения. У меня есть вариант решения, но боюсь что он не оптимальный.
зачем велосипед, когда уже есть
std::vector<int>
std::vector<int>::insert
хотя, я понял, что задачу не понял )) Написано непонятно
парой слов: перетаскиваем отрезок вектора в другую позицию. Так ?
тут возможны разные реализации. смотря чего хотим достичь.
в общем случае, удобны двусвязные списки. перекинул два указателя - вот тебе и "перемещение". но проход по списку будет медленнее и выборка конкретного элемента - тоже. есть методы, используемые в синтаксических анализаторах: когда есть строка и есть указатели на начало и конец кусочков. выборка происходит без работы со строками, меняются только указатели в списке. есть и другие варианты. всё зависит от требований оптимизации.
тогда обычный вектор из STL вполне подойдёт. он как раз занимается индексированными списками с произвольным доступом и делает это довольно шустро.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)