我寻找一个提供不变性的STL容器类(一旦创建容器,就不允许在容器上进行CRUD。它都是只读的。)
当然,我可以继承STL容器类并创建一个不可变版本然后将所有CRUD方法私有化,并且只保留将可变容器作为输入的构造函数。例如,
template<T>
public class ImmutableVector<T>(): public vecotr<T>()
{
private void clear();
...
}
但这似乎很多工作。我的问题是:世界上有没有STL不可变库吗?
答案 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;
...
}