我很确定这是一些指针业务,但我已经离开C++有一段时间了。
基本上,我有一个带有getVector()
方法的类,该方法返回作为类变量存储的std::vector
。
我想要访问这些元素,但不是每次调用getVector()
时都复制整个向量。对此的正确方法是什么?存储为类变量的向量本身不是指针。
发布于 2011-12-07 15:27:31
返回向量的 reference 。
如果调用范围应该能够修改向量,则为
类返回{ std::vector v;public: std::vector& getVector() { MyClass v;}};如果调用范围不需要修改向量,则返回
类返回{ std::vector v;public: const std::vector& getVector() const { MyClass v;} };
两者都是完全“安全”的,因为向量不是函数作用域的局部。
发布于 2011-12-07 15:38:00
那么,如果调用代码可以访问向量,为什么向量是私有属性呢?如果您将其设置为公共属性,那么就不需要getVector()方法了,对吗?
如果您出于某些原因希望矢量成为prvate属性,那么您不应该提供这种开放访问,而应该提供适当的方法来修改私有数据。
提供开放访问,同时仍然保持向量私有的最接近的方法是提供对迭代器的访问
typedef std::vector<foo>::iterator iterator_foo
iterator_foo begin_foo() { return v.begin(); }
iterator_foo end_foo() { return v.end(); }
您可以按如下方式使用
MyClass::iterator_foo ifoo = std::find(
theclass.begin_foo(), theclass.end_foo(), foo_target );
if ( ifoo != theclass.end_foo() ) {
cout << "found it" << endl;
....
https://stackoverflow.com/questions/8417819
复制