我在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));