重载时读取并插入到向量中 []

Reading and inserting into vector when overloading []

本文关键字:向量 插入 读取 重载      更新时间:2023-10-16

我正在尝试创建一个 ovreload 运算符 [] 的类。我的代码如下所示:

class DynamicArray{
public: 
DynamicArray(){
}
 double operator[](unsigned int i) const{
 return values.at(i);
}
double &operator[](unsigned int i){
values.insert(values.begin()+i, ??? );
}
private:
vector<double> values;
}

我想这样称呼它(数组是动态数组的对象(:

cout << array[5];

这工作正常,但我也想做一些事情:

array[5] = 5.4;

但我不知道我怎么能做到这一点。(我知道我可以只使用矢量,但我需要在课堂上做很多东西(。 我的问题是 - 我如何更改第二个重载,以便它将值分配给向量中的索引?编辑:澄清一下:我不知道有多少值或将它放在哪里,所以我需要 ti 相应地调整大小。

你的非const operator[]函数应该这样写:

double & operator[](size_t index) {
    if(index >= values.size())
        values.resize(index + 1);
    return values[index];
}

这应该传达您想要的语义。

编辑:我将支持评论中的建议,即使用std::mapstd::unordered_map来表示这种数据结构,因为它允许您编写使用任意索引的代码,而不是被迫将所有内容存储在连续内存中,这是std::vector的约束。但是我将把解决方案留在这里,因为将所有内容存储在连续内存中可能是一项设计要求(特别是如果,比如说,这是针对图形应用程序的(,所以在某些情况下,这样的解决方案是合乎逻辑的。