verificar usar qué pueden para métodos hay elementos cplusplus contenedores contenedor clase c++ stl containers

c++ - usar - ¿Cómo puedo desplazar elementos dentro del contenedor STL?



map c++ (2)

¿No puedes hacer un simple inserto y luego borrar?

No olvide que invalidará cualquier iterador que haga referencia a los elementos que se encuentran sobre el punto de eliminación o inserción, el que sea más bajo.

HTH

aclamaciones,

Robar

Quiero desplazar los elementos dentro del contenedor en cualquier posición hacia la izquierda o hacia la derecha. Los elementos cambiantes no son contiguos.

por ejemplo, tengo un vector {1,2,3,4,5,6,7,8} y quiero desplazar {4,5,7} hacia la izquierda en 2 posiciones, el resultado esperado será {1,4 , 5,2,7,3,6,8}

¿Hay una forma elegante de resolverlo?


Puedes escribir tu propia función de cambio. Aquí hay uno simple:

#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); }

Puede usarlo así:

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}

Esta es una implementación ingenua, porque al cambiar varios elementos, find repetirá muchas veces al principio del contenedor. Además, asume que cada elemento es único, lo que podría no ser el caso. Sin embargo, espero que te haya dado algunos consejos sobre cómo implementar lo que necesitas.