1

我正在实现一个向量,所以我希望它表现为一个数组。这就是我尝试实现下标运算符但我没有实现正确行为的原因。

实现是这样的:

template <typename value_type>
class Vector{ 
    private:
    value_type ** vector ; 
    long size ; 
    long usedSize ; 

    public: 
    /.../ 
    value_type & operator [] (long) ; // For writing.
    const value_type & operator [] (long) const ; // For reading.
    /.../
}

template<typename value_type> 
value_type & Vector<value_type>::operator[] ( long index ) {
    if ( index < 0 || index > usedSize ) 
        return out_of_range () ; 
    else {
        vector[index] = new value_type () ; 
        usedSize++ ; 
        return *(vector[index]) ;
    }
} 

template<typename value_type> 
const value_type & Vector<value_type>::operator[] ( long index ) const {
    if ( index < 0 || index > usedSize ) 
        return out_of_range () ; 
    else { return (*vector[index]) ; }
}

然后我用这个测试对象的行为:

int main (void) { 
    Vector<int> * v = new Vector ( 10 ) ; // Creates a vector of 10 elements.
    (*v)[0] = 3 ; 
    int a = (*v)[0] ; 
    cout << "a = " << a << endl ;
}

我从执行中得到这个:

$> a = 0 

一些线程建议使用重载赋值运算符的处理程序类,我想知道是否有办法避免使用处理程序对象来完成任务。

提前致谢。

来自阿根廷的贡萨洛。

4

1 回答 1

1

假设你错了

cout << "a =" << (*v)[0] << endl;

const value_type & Vector::operator[] ( 长索引 ) const

将会被使用。

事实上两次

value_type & Vector::operator[]

被使用,所以你用新的“替换”以前的值(同时泄漏内存)

下面应该有帮助

value_type & Vector<value_type>::operator[] ( long index ) {
    if ( index < 0 || index > usedSize )
        ///out of bounds handling
    else {
        if(vector[index]== 0)
        {
            vector[index] = new value_type () ;
            usedSize++ ;
        }
        return *(vector[index]) ;
    }
}
于 2013-06-01T23:52:21.470 回答