重载运算符 [] 来替换矢量元素
Overload operator [] to replace vector elements
我有一个类A,它有一个向量<classB*>vObject。
class ClassA{
public:
ClassB** operator [] (int index);
private:
vector<ClassB*> vObject
};
假设 vObject 填充了一些类 B* 对象。我想做的是能够像这样替换矢量的 B* 类元素:
classA_obj[3] = classA_obj[5];
classA_obj[1] = classB_obj;
我试图返回 ClassB 元素的指针。这是我当前的运算符实现:
ClassB** ClassA::operator [](int index){
return &vObject[index]; }
之后,我尝试了以下方法:
*classA_obj[3] = *classA_obj[5]
仅使用向量完成所有工作的代码为:
vector<ClassB*> vObject;
vObject.push_back(new ClassB(ARG1,ARG2));
vObject.push_back(new ClassB(ARG1,ARG2));
vObject[0] = vObject[1];
我对此感到非常困惑,我认为我的代码是正确的,但实际上它不起作用。如果有人能告诉我我做错了什么,我会很高兴。
上面的代码只是我实际代码的一个示例。
如果您返回引用,您将能够执行您请求的替换。
class ClassA{
public:
ClassB*& operator [] (int index) { return vObject[index]; }
private:
std::vector<ClassB*> vObject
};
但是,您描述用法的方式似乎表明您可以轻松地更改矢量以容纳ClassB
对象而不是指针。
class ClassA{
public:
ClassB& operator [] (int index) { return vObject[index]; }
private:
std::vector<ClassB> vObject
};
然后,无需将new ClassB
推送到向量中,只需推送ClassB
:
vObject.push_back(ClassB(ARG1,ARG2));
vObject.push_back(ClassB(ARG1,ARG2));
这样做的好处是,无需显式访问容器即可删除指针。否则,您将需要更新ClassA
以遵守三法则。
普通std::vector
返回一个引用,所以你可能应该尝试一下:
ClassB*& ClassA::operator [](int index)
{
return vObject[index];
}
In the definition:
class A {
public:
ClassB*& operator [] (int index) { return vObject.at(index); };
private:
vector<ClassB*> vObject;
}
这是一个inline function
,没有别的事情可做。但是,我会检查index
只是为了理智。
相关文章:
- 按平均值替换数组中的元素
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- std::map:当元素不可默认构造时创建/替换元素
- 如何替换双端对象中的元素?
- 使用 Rcpp 加速替换迭代算法中的列表和向量元素是否合法?
- 如何根据向量中的值替换元素?
- 无法弄清楚为什么我的打印阵列要替换元素
- 将 Directx12 资产移植到 XAML 元素:关于 WRL 的建议::ComPtr 替换?
- 匹配部分专用化以按类型替换元组元素
- 删除两个相邻的元素并用矢量中的单个元素替换它们
- C :在我们拥有迭代器的std :: unordered_set中替换一个元素
- 在无序地图中替换元素
- 将矢量中的一系列元素替换为值
- 如何将向量中的所有元素替换为元素数字的总和
- 如何有效地用不同的整数元素替换字符字符串的元素
- 用下一个最大的元素替换每个元素?
- C++:将类数组的元素替换为 const 成员
- 外壳排序将数组的元素替换为 -858993460
- 将vector语言 - c++中的old_value元素替换为new_value
- 将元素替换为vector的特定位置