Qt 中的数据结构 QVector、QList 使用

与 stl 和 boost 库中的链表差不多,都有我们常见的属性,如at、push_back、push_front、erase 等等,操作与我们以前学习过的都大相径庭,所以我只贴出代码,有更多需要可以参考 Qt 帮助文档。下面只是 QList 的代码,其实你把里面 QList 的关键字替换成 QVector 就可以切换成数组形式了。这是 Qt 对为了让大家更方便的使用,所以让接口风格装都保持一致性,只不过在遍历时,vector使用at方法要比遍历链表速度快。

#include <QList>
#include <QString>
#include <QDebug>

int main()
{
    QList<QString> list;

    // 追加数据
    list.append("abc");
    list.append("def");
    list.append("ghi");

    // 相当于 append
    list << "jkl";

    // stl风格插入数据
    list.push_back("mno");
    list.push_front("pqr");

#if 0
    // 删除所有为 abc 的元素
    list.removeAll("abc");
    // 删除第一个为 def 的元素
    list.removeOne("def");
    // 删除位置为 0 的元素
    list.removeAt(0);
    // 删除首元素
    list.removeFirst();
    // 删除尾元素
    list.removeLast();
    // 全部删除
    list.clear();
#endif

    // 遍历方式1
    foreach(QString tmp, list)
    {
        qDebug() << tmp;
    }

    // 遍历方式2,如果要在for中删除数据时,最好将迭代器放到循环中自增,防止删除数据后遍历不准的情况
    for(QList<QString>::iterator it = list.begin();
        it != list.end();
        /*it ++*/)
    {
        if (*it == "abc")
        {
            it = list.erase(it);
        }
        else
        {
            it++;
        }
    }

    // 遍历方式3,效率最低
    /*for(int i = 0; i < list.size(); i++)
    {
        qDebug() << list.at(i);
    }*/
    return 0;
}

 

评论