Qt
Clases de Contenedores Qt
Buscar..
Observaciones
Qt proporciona sus propias clases de contenedor de plantillas. Todos ellos están compartidos implícitamente. Proporcionan dos tipos de iteradores (estilo Java y estilo STL).
Los contenedores secuenciales de Qt incluyen: QVector, QList, QLinkedList, QStack, QQueue.
Los contenedores asociativos Qt incluyen: QMap, QMultiMap, QHash, QMultiHash, QSet.
Uso de QStack
QStack<T>
es una plantilla de clase Qt que proporciona pila. Su análogo en STL es std::stack
. Es el último en entrar, primero en salir de la estructura (LIFO).
QStack<QString> stack;
stack.push("First");
stack.push("Second");
stack.push("Third");
while (!stack.isEmpty())
{
cout << stack.pop() << endl;
}
Saldrá: Tercero, Segundo, Primero.
QStack
hereda de QVector
por lo que su implementación es bastante diferente de STL. En STL std::stack
se implementa como un envoltorio para escribir como argumento de plantilla (deque por defecto). Las operaciones principales son las mismas para QStack
y para std::stack
.
Uso de QVector
QVector<T>
proporciona una clase de plantilla de matriz dinámica. Proporciona un mejor rendimiento en la mayoría de los casos que QList<T>
por lo que debe ser la primera opción.
Se puede inicializar de varias maneras:
QVector<int> vect;
vect << 1 << 2 << 3;
QVector<int> v {1, 2, 3, 4};
Lo último implica lista de inicialización.
QVector<QString> stringsVector;
stringsVector.append("First");
stringsVector.append("Second");
Puedes obtener i-th elemento de vector de esta manera:
v[i]
o at[i]
Asegúrese de que i
sea una posición válida, incluso at(i)
no se comprueba, esta es una diferencia de std::vector
.
Uso de QLinkedList
En Qt, debe usar QLinkedList en caso de que necesite implementar una lista enlazada .
Es rápido de agregar, anteponer, insertar elementos en QLinkedList
- O (1), pero la búsqueda de índices es más lenta que en QList
o QVector
- O (n). Esto es normal teniendo en cuenta que hay que recorrer los nodos para encontrar algo en la lista vinculada.
Tabla compexity algorítmico completo se puede encontrar aquí .
Solo para insertar algunos elementos en QLinkedList
puede usar el operador <<()
:
QLinkedList<QString> list;
list << "string1" << "string2" << "string3";
Para insertar elementos en medio de QLinkedList
o modificar todos o algunos de sus elementos, puede usar iteradores de estilo Java o estilo STL. Aquí hay un ejemplo simple de cómo multiplicamos todos los elementos de QLinkedList
por 2:
QLinkedList<int> integerList {1, 2, 3};
QLinkedList<int>::iterator it;
for (it = integerList.begin(); it != integerList.end(); ++it)
{
*it *= 2;
}
QList
La clase QList
es una clase de plantilla que proporciona listas. Almacena elementos en una lista que proporciona un acceso rápido basado en índices e inserciones y eliminaciones basadas en índices.
Para insertar elementos en la lista, puede usar el operator<<()
, insert()
, append()
o prepend()
. Por ejemplo:
operator<<()
QList<QString> list;
list << "one" << "two" << "three";
insert()
QList<QString> list;
list << "alpha" << "beta" << "delta";
list.insert(2, "gamma");
append()
QList<QString> list;
list.append("one");
list.append("two");
list.append("three");
prepend()
QList<QString> list;
list.prepend("one");
list.prepend("two");
list.prepend("three");
Para acceder al elemento en una posición de índice particular, puede usar el operator[]()
o at()
. at()
puede ser más rápido que el operator[]()
, nunca causa una copia profunda del contenedor y debería funcionar en tiempo constante. Ninguno de los dos hace la comprobación de argumentos. Ejemplos:
if (list[0] == "mystring")
cout << "mystring found" << endl;
O
if (list.at(i) == "mystring")
cout << "mystring found at position " << i << endl;
Para eliminar elementos, existen funciones como removeAt()
, takeAt()
, takeFirst()
, takeLast()
, removeFirst()
, removeLast()
o removeOne()
. Ejemplos:
takeFirst()
// takeFirst() removes the first item in the list and returns it
QList<QWidget *> list;
...
while (!list.isEmpty())
delete list.takeFirst();
removeOne()
// removeOne() removes the first occurrence of value in the list
QList<QString> list;
list << "sun" << "cloud" << "sun" << "rain";
list.removeOne("sun");
Para encontrar todas las apariciones de un valor particular en una lista, puede usar indexOf()
o lastIndexOf()
. Ejemplo:
indexOf()
int i = list.indexOf("mystring");
if (i != -1)
cout << "First occurrence of mystring is at position " << i << endl;