是否有不可变的STL容器类?

时间:2016-12-18 15:19:40

标签: c++ c++11 stl

我寻找一个提供不变性的STL容器类(一旦创建容器,就不允许在容器上进行CRUD。它都是只读的。)

当然,我可以继承STL容器类并创建一个不可变版本然后将所有CRUD方法私有化,并且只保留将可变容器作为输入的构造函数。例如,

template<T>
public class ImmutableVector<T>(): public vecotr<T>()
{
    private void clear();

 ...
 }

但这似乎很多工作。我的问题是:世界上有没有STL不可变库吗?

2 个答案:

答案 0 :(得分:12)

您可以使用const容器,例如一个const std::vector<int>。很可能你会在初始化和填充时使用一个可变容器,然后使用const_cast - 使用const - 它(或传输它)作为const容器,更可能是{{{ 1}}容器引用(例如将const std::vector<int> &vi作为形式传递给某个函数)。

答案 1 :(得分:0)

C ++中没有不可变的容器。制作不可变容器的最佳方法正是您正在做的事情。

你最好制作一个ImmutableVector<T>类,它接受一个初始化列表来初始化其中包含的std::vector。这样,您只能公开const迭代器和读取函数,而不是扩展std::vector。如果STL实现了更多非只读方法,则允许它们使用,直到您手动禁用它们为止。

示例:

template<typename T>
public class ImmutableVector<T>
{
    std::vector<T> vec;
public:
    typedef T value_type;
 ...
}