QList
是一个动态数组,类似于C++标准库的std::vector。它可以存储各种类型的元素,并提供了插入、删除和访问元素的方法。
#include
int main() {
QList<int> numbers;
numbers << 1 << 2 << 3 << 4;
// 访问元素
int secondNumber = numbers.at(1); // 2
// 插入元素
numbers.insert(2, 5);
// 删除元素
numbers.removeOne(3);
return 0;
}
QVector
类似于 QList
,但适用于需要高效连续内存存储的情况。
#include
int main() {
QVector<QString> names;
names << "Alice" << "Bob" << "Charlie";
// 使用索引访问元素
QString secondName = names[1]; // "Bob"
return 0;
}
QMap
是一个关联数组,存储键-值对,键是唯一的,并按键的排序顺序排列。
#include
int main() {
QMap<QString, int> ageMap;
ageMap.insert("Alice", 25);
ageMap.insert("Bob", 30);
ageMap.insert("Charlie", 28);
// 通过键访问值
int bobAge = ageMap.value("Bob"); // 30
return 0;
}
QHash
是一个散列表,存储键-值对,具有快速查找性能,但不保持键的顺序。
#include
int main() {
QHash<QString, QString> cityCountry;
cityCountry.insert("Paris", "France");
cityCountry.insert("Tokyo", "Japan");
cityCountry.insert("New York", "USA");
// 使用键查找值
QString tokyoCountry = cityCountry.value("Tokyo"); // "Japan"
return 0;
}
QSet
是一个无序集合,存储不重复的值。
#include
int main() {
QSet<int> numbers;
numbers << 3 << 5 << 7 << 5; // 注意:重复的值只会存储一次
// 判断值是否存在
bool containsSeven = numbers.contains(7); // true
return 0;
}
QLinkedList
是一个双向链表,适用于频繁插入和删除操作。
#include
int main() {
QLinkedList<QString> names;
names << "Alice" << "Bob" << "Charlie";
// 在链表中插入元素
names.insert(names.begin(), "David");
// 从链表中移除元素
names.removeOne("Bob");
return 0;
}
QStack
是一个堆栈,支持后进先出(LIFO)操作。
#include
int main() {
QStack<int> stack;
stack.push(10);
stack.push(20);
stack.push(30);
// 弹出栈顶元素
int poppedValue = stack.pop(); // 30
return 0;
}
QQueue
是一个队列,支持先进先出(FIFO)操作。
#include
int main() {
QQueue<QString> tasks;
tasks.enqueue("Task 1");
tasks.enqueue("Task 2");
tasks.enqueue("Task 3");
// 出队列
QString nextTask = tasks.dequeue(); // "Task 1"
return 0;
}
这些类类似于 QMap
和 QHash
,但允许多个键对应同一个值。
#include
int main() {
QMultiMap<QString, int> scores;
scores.insert("Alice", 90);
scores.insert("Bob", 85);
scores.insert("Alice", 95);
// 获取所有 Alice 的分数
QList<int> aliceScores = scores.values("Alice"); // [90, 95]
return 0;
}