我用 C++ 做了一个基本的 vector 类,这还没有完成,而是一个开始。我在测试 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));
关于C++ vector 实现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21815296/