(对不起。我的英语不太好。我是伊朗人) 我们知道oop的目的是合并数据结构和算法以提供单个实体。所以STL将它们分开。为什么STL没有将自己的方法写成成员函数?
答案 0 :(得分:4)
考虑实施您所建议的内容 - 每个数据结构都必须重新实现每个算法:
template <typename T>
class vector
{
auto for_each(/* ... */) { /* ... */ }
auto partition(/* ... */) { /* ... */ }
auto sort(/* ... */) { /* ... */ }
/* ... */
};
template <typename T>
class list
{
auto for_each(/* ... */) { /* ... */ }
auto partition(/* ... */) { /* ... */ }
auto sort(/* ... */) { /* ... */ }
/* ... */
};
template <typename TK, typename TV>
class map
{
auto for_each(/* ... */) { /* ... */ }
auto partition(/* ... */) { /* ... */ }
auto sort(/* ... */) { /* ... */ }
/* ... */
};
如您所见,严重代码重复。此外,这种方法不可维护,因为添加新算法将需要更改每个容器的实现。
如果UFCS与ranges一起被接纳到标准中,那么您将能够在标准容器上调用算法,就像它们是成员函数一样:< / p>
std::vector<int> v{/* ... */};
v.sort(); // Actually calls `std::sort(v)` thanks to UFCS.