C++ 重载时读取并插入向量[]

C++ 重载时读取并插入向量[],c++,vector,operator-overloading,C++,Vector,Operator Overloading,我正在尝试创建一个类,该类重新加载操作符[]。 我的代码如下所示: 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<dou

我正在尝试创建一个类,该类重新加载操作符[]。 我的代码如下所示:

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;
}
double & operator[](size_t index) {
    if(index >= values.size())
        values.resize(index + 1);
    return values[index];
}
但我不知道该怎么做。 (我知道我可以只使用向量,但我需要在课堂上做大量的东西)。 我的问题是-如何更改第二个重载,使其将值赋给向量中的索引? 编辑:
澄清一下:我不知道有多少个值或它将放在哪里,所以我需要ti相应地调整大小。

您的非
常量
运算符[]
函数应该这样编写:

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;
}
double & operator[](size_t index) {
    if(index >= values.size())
        values.resize(index + 1);
    return values[index];
}
这应该传达您想要的语义


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

澄清一下:如果
没有足够的空间容纳新值,那么该代码是否会期望扩展以容纳新值?或者这个类只是围绕
std::vector
的现有功能进行包装?您应该有一个
double&operator[]
来完成这个任务。检查索引是否已经在向量中,如果没有插入它,最后返回对元素的引用。重载不会执行赋值,但它只返回可用于为其赋值的引用。插入
的目的是什么?在您的情况下,只需
返回值[i]。。。但是我想您希望能够调用
array[5]=5.4
当数组中只有3个元素时,对吗?我可能会使用
映射
作为底层容器,这将使在任意索引处插入变得更容易,无需手动调整大小gi我仅限于向量或动态数组分配,因此:)