在阅读“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算法的情况下修复它?
答案 0 :(得分:3)
扩展@Chernobyl的答案:C ++库将所有标准容器,算法等放入名为std
的命名空间中。这意味着要使用它们,您必须将它们带入全局命名空间(using namespace std;
或using std::sort
),或者只是自己限定名称std::sort(vec.begin(), vec.end());
任何一个都可以。
这样做的原因是标准库中的所有标识符都将成为“保留字”,并且您将无法(轻松)在程序中使用它们供您自己使用。例如,你没有理由不能自己编写一个名为sort
的函数,它会对特定的数据结构进行排序。然后sort(..)
将调用您的例程,而std::sort(..)
将调用标准库中的例程。同样适用于find
,erase
,remove
,string
,list
等。
答案 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();
}