2

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

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

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

4

3 回答 3

6

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

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

于 2012-10-31T10:10:54.747 回答
2

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

于 2012-10-31T11:02:38.840 回答
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>
于 2012-10-31T10:20:05.973 回答