我在C ++中做了一个基本的矢量类,虽然还没有完成,但是只是一个开始。当我发现问题时,我正在测试operator=函数-[大多数]传递的值是错误的。

所需输出:


  12345678910
  
  12345678910


实际输出:


  12345678910
  
  12-842203133-842150451-842150451-842150451-842150451-842150451-842150451-8421504
  51


template < typename _Ty > class vector
{
public:
    typedef _Ty *iterator;
    typedef vector<_Ty> _Myt;
    vector() : __size(0), __data((_Ty *)calloc(1, sizeof(_Ty))){}
    vector(_Myt &_Rhs)
    {
        __data = (_Ty *)malloc((__size = _Rhs.size()) * sizeof(_Ty));
        memcpy(__data, _Rhs.__data, _Rhs.size());
    }
    ~vector(){ free(__data); }
    _Myt &push_back(const _Ty &_Rhs)
    {
        __data = (_Ty *)realloc(__data, ++__size * sizeof(_Ty));
        __data[__size - 1] = _Rhs;
        return *this;
    }
    size_t size() const
    {
        return __size;
    }
    iterator begin() const
    {
        return &__data[0];
    }
    iterator end() const
    {
        return &__data[__size];
    }
    _Myt &operator=(_Myt &_Rhs)
    {
        __data = (_Ty *)realloc(__data, (__size = _Rhs.size()) * sizeof(_Ty));
        memcpy(__data, _Rhs.__data, _Rhs.size());
        return *this;
    }
private:
    _Ty *__data;
    size_t __size;
};

int main()
{
    vector<int> v, v1;
    for (int i = 1; i <= 10; ++i)
    {
        v1.push_back(i);
    }
    for (vector<int>::iterator i = v1.begin(); i != v1.end(); ++i)
    {
        std::cout << *i;
    }
    std::cout << "\n";
    v = v1;
    for (vector<int>::iterator i = v.begin(); i != v.end(); ++i)
    {
        std::cout << *i;
    }
    getchar();
}


我的代码有什么问题?

最佳答案

memcpy(__data, _Rhs.__data, _Rhs.size());


您的分配运算符中

memcpy(__data, _Rhs.__data, _Rhs.size() * sizeof(_Ty));

10-08 17:04