三行代码  ›  专栏  ›  技术社区  ›  Alex S.

动态阵列的输出问题

  •  0
  • Alex S.  · 技术社区  · 1 月前

    我正在使用一个用于动态数组的模板类,我的代码已经成功编译,但是动态数组中给定元素的get函数似乎不起作用。每当我输出函数时,似乎都不会输出任何东西,但这没有意义,因为我的size函数工作得很好,并且显示数组中确实存在一些东西,我就是无法输出它。有人能帮忙吗?

    #include <iostream>
    using namespace std;
    
    template <class T>
    class Wrapper{
    private:
        T* array;
        int size;
    public:
        Wrapper(){
            array = NULL;
            size = 0;
        }
        int returnSize(){
            return size;
        }
        void addEntry(string input){
            if(returnSize()==0){
                array = new string[returnSize()+1];
                array[returnSize()] = input;
                size+=1;
            }
            else{
                T* newArray = new T[returnSize()+1];
                for(int i = 0; i<returnSize(); i++){
                    newArray[i] = array[i];
                }
                newArray[returnSize()] = input;
                size+=1;
                string *array = new string[returnSize()];
                array = newArray;
            }
            
        }
    
        bool deleteEntry(string input){
            int mySize = returnSize();
            string* testArray = new string[mySize];
            for(int i = 0; i<mySize; i++){
                if(array[i]==input){
                    return true;
                    break;
                }
            }
            string*newArray = new string[mySize-1];
            for(int i = 0; i<mySize; i++){
                if(array[i]!=input){
                    newArray[i+=1] = array[i];
            }
            }
            delete[]array;
            array = newArray;
            return true;
            
        }
        string getEntry(int input){
            if(input>size){
                return NULL;
            }
            return this->array[input];
        }
        void operator=(const Wrapper w){
            this->size = w.returnSize();
            string *newArray = new string[size];
            for(int i = 0; i<size; i++){
                newArray[i] = w.getEntry(i);
            }
            this->array = newArray;
        }
        ~Wrapper(){
            delete[] array;
        }
    
    };
    
    int main(){
        Wrapper<string> w;
        w.addEntry("sam");
        w.addEntry("Josh");
        w.addEntry("tom");
        cout<<"Here"<<endl;
        cout<<w.returnSize();
        for(int i = 0; i<<w.returnSize(); i++){
            cout<<w.getEntry(i);
        }
    }
    
    
    1 回复  |  直到 1 月前
        1
  •  0
  •   Tim Roberts    1 月前

    只是为了收集调查结果,如果你从 addEntry :

               string *array = new string[returnSize()];
    

    并将最终for循环更改为:

        for(int i = 0; i < w.returnSize(); i++){
            cout<<w.getEntry(i)<<"\n";
        }
    

    这正是你所期待的。我自己开的。