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;