小编Geo*_*ton的帖子

不可变的C++容器类

假设我有一个C++类Container,它包含一些类型的元素Element.由于各种原因,在构造之后修改或替换内容是低效的,不合需要的,不必要的,不切实际的和/或不可能的(1).类似于const std::list<const Element>(2)的东西.

Container可以满足STL的"容器"和"序列"概念的许多要求.它可以提供多种类型,如value_type,reference等.它可以提供一个默认的构造函数,一个拷贝构造函数,一个const_iterator类型,begin() const,end() const,size,empty,所有的比较操作符,也许有些的rbegin() const,rend() const,front(),back(),operator[](),和at().

但是,Container不能提供insert,erase,clear,push_front,push_back,非const front,非const back,非const operator[]或者非const at与预期的语义.所以它似乎Container不能成为"序列".此外,Container不能提供operator=,并且swap,它不能提供iterator指向非const元素的类型.因此,它甚至不能成为"容器".

是否有一些不太能够Container满足的STL概念?是否有"只读容器"或"不可变容器"?

如果Container不符合任何规定的一致性水平,部分一致性是否有价值?当它没有资格时,是否会误导它看起来像一个"容器"?是否有一种简洁,明确的方式可以记录一致性,这样我就不必明确记录符合要求的语义?同样,一种记录它的方法,以便未来的用户知道他们可以利用只读的通用代码,但不要指望变异算法有效吗?

如果我放松这个问题,我会得到什么,因此Container …

c++ stl

9
推荐指数
1
解决办法
3617
查看次数

标签 统计

c++ ×1

stl ×1