为什么矢量的这种实现不适用于字符串?
我已经尝试过这种实现与矢量 stl 一样。此实现适用于 int、float、double 和 char。但它不适用于字符串。它显示字符串的运行时错误。你能解决这个问题吗?
这是 github 存储库链接:https : //github.com/Nayeem-CSE-CoU/DataStructure/blob/main/vector.cpp
我还在此处包含了代码:
#include<bits/stdc++.h>
using namespace std;
template<class T>
class Vector
{
private:
T *ptr;
int pos=0;
public:
Vector()
{
ptr=new T();
}
Vector(int n)
{
ptr=new T();
pos=n;
}
Vector(int n,T val)
{
ptr=new T();
for(int i=0;i<n;i++)
{
*(ptr+pos)=val;
pos++;
}
}
void push_back(T n)
{
*(ptr+pos)=n;
pos++;
}
void pop_back()
{
pos--;
delete (ptr+pos);
}
T const operator [] (int i)const
{
return *(ptr+i);
}
T &operator[](int i)
{
return *(ptr+i);
}
int size()
{
return pos;
}
T* begin()
{
return ptr;
}
T* end()
{
return (ptr+pos);
}
};
int main()
{
Vector<string> sf;
sf.push_back("kkk");
sf.push_back("jjj");
sf.push_back("Nayeem");
for(auto x:sf)
cout<<x<<" ";
cout<<endl;
return 0;
}
回答
ptr=new T();
您的向量实现创建了一个动态对象。
void push_back(T n) { *(ptr+pos)=n; pos++; }
您的向量实现尝试访问指向单个对象的指针,就好像它是指向对象数组的指针一样,访问该单个对象的边界之外,并且程序的行为未定义。
此实现适用于 int、float、double 和 char
它不适用于任何类型。