Qt中如何使用STL算法?
How to use STL algorithms in Qt?
在阅读 "c++ gui programming eith Qt 4 , second edition " 时,我遇到了这个话题:
"The STL header provides a more complete set of generic algorithms. these algorithms can be used on Qt containers as well as STL containers. If STL implementations are available on all your platforms, there is probably no reason to avoid using the STL algorithms when Qt lacks an equivalent algorithm ."
它指出 STL 的通用算法(在 "algorithm" header 中定义)也可以与 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 算法的方法来修复它?
这个函数位于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();
}
扩展@Chernobyl 的回答:C++ 库将所有标准容器、算法等放入名为 std
的命名空间中。这意味着要使用它们,您必须将它们带入全局命名空间(using namespace std;
或 using std::sort
)或者自己限定名称 std::sort(vec.begin(), vec.end());
两者都可以。
这样做的原因是,否则标准库中的所有标识符都会有效地变成 "reserved words",并且您将无法(轻松地)在您的程序中使用它们供您自己使用。例如,您没有理由不能自己编写一个名为 sort
的函数来对特定数据结构进行排序。然后 sort(..)
将调用您的例程,而 std::sort(..)
将调用标准库中的例程。 find
、erase
、remove
、string
、list
等也是如此。
在阅读 "c++ gui programming eith Qt 4 , second edition " 时,我遇到了这个话题: "The STL header provides a more complete set of generic algorithms. these algorithms can be used on Qt containers as well as STL containers. If STL implementations are available on all your platforms, there is probably no reason to avoid using the STL algorithms when Qt lacks an equivalent algorithm ."
它指出 STL 的通用算法(在 "algorithm" header 中定义)也可以与 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 算法的方法来修复它?
这个函数位于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();
}
扩展@Chernobyl 的回答:C++ 库将所有标准容器、算法等放入名为 std
的命名空间中。这意味着要使用它们,您必须将它们带入全局命名空间(using namespace std;
或 using std::sort
)或者自己限定名称 std::sort(vec.begin(), vec.end());
两者都可以。
这样做的原因是,否则标准库中的所有标识符都会有效地变成 "reserved words",并且您将无法(轻松地)在您的程序中使用它们供您自己使用。例如,您没有理由不能自己编写一个名为 sort
的函数来对特定数据结构进行排序。然后 sort(..)
将调用您的例程,而 std::sort(..)
将调用标准库中的例程。 find
、erase
、remove
、string
、list
等也是如此。