如何在Qt中使用STL算法?

时间:2015-02-08 06:05:05

标签: c++ qt stl

在阅读“c ++ gui programming eith Qt 4,second edition”时,我遇到了这个话题:    “STL头提供了一套更完整的通用算法。这些算法可用于Qt容器和STL容器。如果所有平台上都有STL实现,那么在Qt时可能没有理由避免使用STL算法没有等效的算法。“

它指出STL的通用算法(在“算法”标题中定义)也可以与Qt容器一起使用。但是,当我运行以下代码时,它会显示“sort:identifier not found”的错误:

#include <QApplication>
#include <algorithm>
#include <QVector>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 QVector<int>vec{9,6,10,5,7};
 sort(vec.begin(),vec.end());
    return a.exec();
}

有没有办法在不使用Qt算法的情况下修复它?

2 个答案:

答案 0 :(得分:3)

扩展@Chernobyl的答案:C ++库将所有标准容器,算法等放入名为std的命名空间中。这意味着要使用它们,您必须将它们带入全局命名空间(using namespace std;using std::sort),或者只是自己限定名称std::sort(vec.begin(), vec.end());

任何一个都可以。 这样做的原因是标准库中的所有标识符都将成为“保留字”,并且您将无法(轻松)在程序中使用它们供您自己使用。例如,你没有理由不能自己编写一个名为sort的函数,它会对特定的数据结构进行排序。然后sort(..)将调用您的例程,而std::sort(..)将调用标准库中的例程。同样适用于finderaseremovestringlist等。

答案 1 :(得分:2)

此函数位于std命名空间中,因此只需编写:

#include <QApplication>
#include <algorithm>
#include <QVector>
using namespace std;//new line!

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 QVector<int>vec{9,6,10,5,7};
 sort(vec.begin(),vec.end());
    return a.exec();
}

每次都写std::sort

#include <QApplication>
#include <algorithm>
#include <QVector>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 QVector<int>vec{9,6,10,5,7};
 std::sort(vec.begin(),vec.end());
    return a.exec();
}