为什么STL分离数据结构和算法

时间:2016-10-06 15:06:21

标签: c++ stl

(对不起。我的英语不太好。我是伊朗人) 我们知道oop的目的是合并数据结构和算法以提供单个实体。所以STL将它们分开。为什么STL没有将自己的方法写成成员函数?

1 个答案:

答案 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(/* ... */) { /* ... */ }
    /* ... */
};

如您所见,严重代码重复。此外,这种方法不可维护,因为添加新算法将需要更改每个容器的实现。

如果UFCSranges一起被接纳到标准中,那么您将能够在标准容器上调用算法,就像它们是成员函数一样:< / p>

std::vector<int> v{/* ... */};
v.sort(); // Actually calls `std::sort(v)` thanks to UFCS.