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;


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow