我正在编写一个程序,其中一个类有一个大的数据成员std::vector(大约100k - 1M项).其他类需要能够访问此向量.目前我有一个标准的访问器函数返回向量,但是这会返回我相信的向量的副本.我认为只返回迭代器或指向第一个元素的指针会有更多的内存和时间效率.但是,如果我这样做,那么如何使用这个指针来运行vector并知道何时停止(即向量结束的位置)?
我的代码看起来像这样:
class MyClass
{
private:
std::vector<MyObj> objects_;
//...
public:
std::vector<MyObj> getObjects() { return objects_; }
//...
}
Run Code Online (Sandbox Code Playgroud)
当我想要运行(模拟)连接向量时,这个问题以另一种形式出现.如果我有一个vector的MyClass,我希望能够遍历所有所包含的object_载体.我从这个答案中知道boost :: join做了我的想法,但我认为我需要返回副本才能正常工作.我可以返回一个指向向量的指针,并且仍然能够连续迭代它和其他人吗?
为避免性能损失,请返回参考.
// Non-const version
std::vector<MyObj>& getObjects() { return objects_;}
// const version
std::vector<MyObj> const& getObjects() const { return objects_; }
Run Code Online (Sandbox Code Playgroud)
但是,在进行此更改之前,必须考虑公开对成员变量的引用的缺点.它使你的课程变得不那么灵活.objects_如果更有意义而不影响该类的所有用户,则无法轻松更改为其他类型的容器.
| 归档时间: |
|
| 查看次数: |
1152 次 |
| 最近记录: |