通过 STL 算法利用本地类
在探索 STL 算法的多方面性质时,您可能会质疑无法利用本地定义的类,因为这些算法中的谓词。此限制的起源在于 C 98/03 标准的范围内。
根据该标准的第 14.3.1 条,限制适用于用作模板参数的类型。这些限制包括禁止本地类型、缺乏链接的类型、未命名类型或从其任何组合派生的类型。
template <class T> class Y { /* ... */ }; void func() { struct S { /* ... */ }; //local class Y< S > y1; // error: local type used as template-argument Y< S* > y2; // error: pointer to local type used as template-argument }
尽管是无意的,但由于标准演进速度缓慢,这一限制仍然存在。尽管如此,当代编译器接受了后来的 C 版本的进步,现在通常允许在算法中使用局部类型。
示例:
#include <vector> #include <algorithm> int main() { int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; std::vector<int> v(array, array + 10); struct even : public std::unary_function<int, bool> { bool operator()(int x) { return !(x % 2); } }; std::remove_if(v.begin(), v.end(), even()); // compiles successfully return 0; }
在当前的C 环境下,在 STL 算法中使用本地定义的类型已成为一种常见的做法,同时引入 lambda 表达式,进一步增强了算法的性能灵活性。
以上是我可以在现代 C 中将本地类与 STL 算法一起使用吗?的详细内容。更多信息请关注PHP中文网其他相关文章!