C ++ STL向量半常数

时间:2012-10-31 10:06:08

标签: c++ stl vector

我想从具有以下属性的方法返回std::vector:接收者(用户)将能够编辑向量中的元素,但不能更改向量本身(调整大小,删除,添加,等)

  • 如果我返回std::vector<T>&,接收器将能够调整大小,向其添加元素等。
  • 如果我返回std::vector<T> const&(我是否声明了这一点?),他们将无法更改元素。
  • 如果我返回std::vector<T>,它将是一个全新的向量,并且元素的更改将不会出现在原始元素中。

有没有办法做到这一点?也许是引用的转发器,以const(std::vector<T&> const)的形式返回?甚至有这样的事情吗?如果有,是否可以隐含地将我的std::vector<T>转换为它?

3 个答案:

答案 0 :(得分:6)

由于您似乎能够通过引用返回向量,因此您可以将迭代器返回到该向量的开头和结尾。使用迭代器,用户可以编辑任何矢量成员,但不能在没有矢量本身的情况下添加或删除它们。

您还可以提供一个函数,该函数提供带索引的随机访问,可能是重载operator[]

答案 1 :(得分:2)

如果您不想要矢量的属性,请不要返回矢量。设计一个具有所需属性的类。如果合适,使用向量来实现它。矢量是一种工具,本身并不是目的。

答案 2 :(得分:0)

// vector of pointers to elements by value
std::vector<T*>
// reference to const vector of pointers to elements
std::vector<T*> const&
// shared pointer of to const vector of pointers to elements
std::shared_ptr<std::vector<T*> const>

// vector of shared pointers to elements by value
std::vector<std::shared_ptr<T> >
// reference to const vector of shared pointers to elements
std::vector<std::shared_ptr<T> > const&
// shared pointer of to const vector of shared pointers to elements
std::shared_ptr<std::vector<std::shared_ptr<T> > const>