为什么矢量的这种实现不适用于字符串?

我已经尝试过这种实现与矢量 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

它不适用于任何类型。


以上是为什么矢量的这种实现不适用于字符串?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>