1
22
嗯,在C++ 0x中你可以… 在C++ 03中,有一个段落23.1 [LIB,容器,要求] / 3,它表示
这是当前阻止您使用的
但是,在C++0x中,这个段落丢失了,
如果我正确地解释了这些需求,应该可以实例化
不过,您仍然无法在适当的位置对向量进行排序。 |
2
17
在标准容器中放置的类型必须是可复制和可分配的。原因在于
我认为最接近的解决办法是使用某种间接的方法。所以,您可以有一个指向const的指针,或者您可以有一个对象,它保存了您想要的值,但不能在对象内更改该值(就像
将元素保持在一个特定的索引上是不变的,这与标准容器的工作方式不符。您可能能够构建自己的以这种方式工作的,但是标准的不能。并且,基于数组的任何一个都不能工作,除非您能够设法将它们的初始化放入
有
编辑 :如果您要做的主要是保持容器不变,但仍然能够在代码中的某些位置更改它,那么在大多数位置使用const-ref,然后提供需要能够更改容器直接访问或非const-ref的代码将使这成为可能。
所以,使用
另一方面,如果您希望能够经常更改容器中的内容,但不更改特定元素,那么我建议在容器周围放置一个包装类。在情况下
这样,您可以更新容器本身,但不能更改它的单个元素。而且,只要您以内联方式声明所有的函数,那么拥有包装器就不会对性能造成太大影响(如果有的话)。 |
3
10
你不能创建一个常量向量,即使你可以,它也会非常无用。如果删除第二个int,那么从那里开始的所有内容都会向下移动一个--read:modified--这样就不可能保证v[5]在两种不同的情况下具有相同的值。 除此之外,一个常量在被声明之后就不能被分配给它,除非将其丢弃。如果你想这样做,你为什么要先用警察? |
4
7
你需要写自己的课。您当然可以使用std::vector作为内部实现。然后只需实现const接口和您需要的几个非const函数。 |
5
4
虽然这并不能满足您的所有要求(能够排序),但是尝试一个常量向量:
不过,您可能需要使用
你可能需要花费一些脑力来写自己的。: |
6
2
我将把所有常量对象都放在一个标准数组中。
|
7
1
我和诺亚在一起:用一个类包装向量,该类只公开您想要允许的内容。
如果不需要动态地向向量添加对象,请考虑
|
8
1
在这种情况下,如果常量对您很重要,我认为您可能希望一直使用不可变类型。从概念上讲,您将拥有一个固定大小的常量数组const
在这之后,通过非常量指针/智能指针保存值可能是最好的(当然也有它自己的开销)。 |
9
1
我一直在考虑这个问题,你的要求似乎被取消了。 您不希望向向量中添加不可变的值:
您真正想要的是向量以可修改的顺序保存一个值的常量集合,该集合不能用
恐怕这是一项非常具体的任务,需要专门的课程。 |
10
1
确实如此
可转让的
是矢量元素类型和
实际上,在许多实现中,即使不使用这些方法,编译也会失败。例如,comeau无法编译plain
我相信这是一个有效的问题。库提供了实现
当然,在任何情况下,任何实现都有权不编译
|
11
0
只使用非专业的
…也使这成为可能:
|
12
0
您可以从std::vector派生一个类const向量,该类重载返回引用的任何方法,并使其返回const引用。要进行排序,请向下转换到std::vector。 |
13
0
不管怎样,无论
|
14
0
编译失败,因为
其中两个操作数都是
拥有const元素在原则上似乎是正确的,但在实践中它是不自然的,而且规范并没有说应该支持它,所以它不存在。至少不在stdlib中(因为那样,它将在vector中)。 |