首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从方法中返回std::vector,而不是每次都是副本?

如何从方法中返回std::vector,而不是每次都是副本?
EN

Stack Overflow用户
提问于 2011-12-07 23:26:23
回答 2查看 149关注 0票数 0

我很确定这是一些指针业务,但我已经离开C++有一段时间了。

基本上,我有一个带有getVector()方法的类,该方法返回作为类变量存储的std::vector

我想要访问这些元素,但不是每次调用getVector()时都复制整个向量。对此的正确方法是什么?存储为类变量的向量本身不是指针。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-07 23:27:31

返回向量的 reference

如果调用范围应该能够修改向量,则为

类返回{ std::vector v;public: std::vector& getVector() { MyClass v;}};如果调用范围不需要修改向量,则返回

类返回{ std::vector v;public: const std::vector& getVector() const { MyClass v;} };

两者都是完全“安全”的,因为向量不是函数作用域的局部。

票数 9
EN

Stack Overflow用户

发布于 2011-12-07 23:38:00

那么,如果调用代码可以访问向量,为什么向量是私有属性呢?如果您将其设置为公共属性,那么就不需要getVector()方法了,对吗?

如果您出于某些原因希望矢量成为prvate属性,那么您不应该提供这种开放访问,而应该提供适当的方法来修改私有数据。

提供开放访问,同时仍然保持向量私有的最接近的方法是提供对迭代器的访问

代码语言:javascript
运行
复制
typedef std::vector<foo>::iterator iterator_foo
iterator_foo begin_foo() { return v.begin(); }
iterator_foo end_foo() { return v.end(); }

您可以按如下方式使用

代码语言:javascript
运行
复制
MyClass::iterator_foo ifoo = std::find(
   theclass.begin_foo(), theclass.end_foo(), foo_target );
if ( ifoo != theclass.end_foo() ) {
   cout << "found it" << endl;
   ....
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8417819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档