首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重载运算符[]替换向量元素

重载运算符[]替换向量元素
EN

Stack Overflow用户
提问于 2012-08-09 13:58:30
回答 3查看 209关注 0票数 1

我有一个classA,它有一个vector< classB* > vObject

代码语言:javascript
复制
class ClassA{
public:
     ClassB** operator [] (int index);
private:
     vector<ClassB*> vObject
};

让我们假设vObject中填充了一些classB*对象。我想要做的是能够替换B类*向量的元素,比如:

代码语言:javascript
复制
classA_obj[3] = classA_obj[5];
classA_obj[1] = classB_obj;

我试图返回ClassB元素的指针。下面是我当前的操作符实现:

代码语言:javascript
复制
ClassB** ClassA::operator [](int index){
    return &vObject[index]; }

在此之后,我尝试了以下几点:

代码语言:javascript
复制
*classA_obj[3] = *classA_obj[5]

只使用向量进行所有工作的代码是:

代码语言:javascript
复制
vector<ClassB*> vObject;
vObject.push_back(new ClassB(ARG1,ARG2));
vObject.push_back(new ClassB(ARG1,ARG2));
vObject[0] = vObject[1];

我真的很困惑,我认为我的代码是正确的,但它实际上不起作用。如果有人能告诉我我做错了什么,我会很高兴的。

上面的代码只是我实际代码的一个示例。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-09 14:00:16

如果您返回一个引用,您将能够完成所要求的替换。

代码语言:javascript
复制
class ClassA{
public:
     ClassB*& operator [] (int index) { return vObject[index]; }
private:
     std::vector<ClassB*> vObject
};

但是,描述您的用法的方式似乎表明您可以轻松地更改您的向量来保存ClassB对象,而不是指针。

代码语言:javascript
复制
class ClassA{
public:
     ClassB& operator [] (int index) { return vObject[index]; }
private:
     std::vector<ClassB> vObject
};

然后,与其将new ClassB推入向量,不如将ClassB推入

代码语言:javascript
复制
vObject.push_back(ClassB(ARG1,ARG2));
vObject.push_back(ClassB(ARG1,ARG2));

这具有不需要显式访问容器以删除指针的优点。否则,您将需要更新ClassA以服从rule of three

票数 2
EN

Stack Overflow用户

发布于 2012-08-09 14:01:36

普通的std::vector返回一个引用,所以您应该尝试这样做:

代码语言:javascript
复制
ClassB*& ClassA::operator [](int index)
{
     return vObject[index]; 
} 
票数 0
EN

Stack Overflow用户

发布于 2012-08-09 14:03:17

代码语言:javascript
复制
In the definition:
class A {
  public:
          ClassB*& operator [] (int index) { return vObject.at(index); };
  private:
          vector<ClassB*> vObject;
}

这是一个inline function,没什么可做的。然而,我会检查index仅仅是为了保持理智。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11885133

复制
相关文章

相似问题

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