有没有办法修正矢量的大小并仍然改变内容?
我尝试过制作一个const矢量const std::vector<int> vec(10);
,但这会阻止我更改值。
vec[3] = 3;
给出编译器错误:指定只读位置。
我也尝试过对非const向量的const引用
std::vector<int> vec(10);
const std::vector<int>& vecref(vec);
,它给出了相同的编译器错误。
我希望能够在声明或初始化阶段之后修复矢量大小。我可以使用老式数组,但我希望能够使用矢量算法。
如果有任何不同,我正在使用g ++。
答案 0 :(得分:6)
使用C ++ 0x,您可以使用std :: array&lt;&gt;,这就像一个很好的旧数组,具有作为STL容器的额外好处,因此允许许多std :: algorithms。
或者,您可能想尝试boost :: array。
请注意,还有std::tr1::array<>
。
编辑:
实际上,我没有涉及的其中一个案例是在读取配置文件的同时增长向量,然后在此之后修复大小 - DanS
然后,为什么不这样(插图):
#include <vector>
int main () {
std::vector<int> foo;
/* ... crunch upon foo ... */
// make a copy vector->vector:
const std::vector<int> bar (foo);
// make a copy any->vector
const std::vector<int> frob (foo.begin(), foo.end());
}
或者,如果你需要reset()语义,但想禁止resize()等,你可以写一个容器适配器:
template <typename T, typename Allocator = allocator<T> >
class resettable_array {
public:
// container ...
typedef typename std::vector<T,Allocator>::iterator iterator;
typedef typename std::vector<T,Allocator>::const_iterator const_iterator;
...
iterator begin() { return vector_.begin() }
const_iterator begin() const { return vector_.begin(); }
...
void push_back (T const &v) { vector_.push_back (v); }
...
// custom
void reset () { ... }
private:
std::vector<T,Allocator> vector_;
};
另见:
答案 1 :(得分:3)
将其嵌入到仅提供您要允许的操作的对象中。
干杯&amp;第h。,
答案 2 :(得分:1)
您可以制作const vector of pointers,并更改他们指向的对象。不是说这是正确的答案,只是有可能。
答案 3 :(得分:1)
看看boost.array,它会给你一个带有向量语义的固定大小的数组(除了会改变数组大小的任何东西)。