簡體   English   中英

C ++動態,基於數組的整數堆棧

[英]C++ Dynamic, Array Based Integer Stack

我剛剛開始學習C ++編程,為了鍛煉,我找到了這個任務。 我必須編寫一個基於數組的動態整數堆棧。 這就是我到目前為止所得到的。

    #include <iostream>

using namespace std;


class DynamicIntegerStack
{
private:
    int *bottom_;
    int *top_;
    int size_;
public:
    DynamicIntegerStack(int n = 20){
        bottom_ = new int[n];
        top_ = bottom_;
        size_ = n;
    }

    int getSize(){ return size_; }

    void push(int c){
        if (!full()){
            *top_ = c;
            top_++;
        }
        else{
            resize(size_ * 2);
            *top_ = c;
            top_++;
        }
    }

    void resize(int newSize){
        //Allocate new array and copy in data
        int *newArray = new int[newSize];
        memcpy(newArray, bottom_, size_);

        // Set the top to the new array
        top_ = newArray + (top_ - bottom_);

        // Delete old array
        delete[] bottom_;

        // Update pointers and size
        bottom_ = newArray;
        size_ = newSize;

        cout << "array has been resized" << endl;
    }

    int num_items() {
        return (top_ - bottom_);
    }
    char pop(){
        top_--;
        return *top_;
    }
    int full() {
        return (num_items() >= size_);
    }
    int empty() {
        return (num_items() <= 0);
    }
    void print(){
        cout << "Stack currently holds " << num_items() << " items: ";
        for (int *element = bottom_; element<top_; element++) {
            cout << " " << *element;
        }
        cout << "\n";
    }
    ~DynamicIntegerStack(){ // stacks when exiting functions
        delete[] bottom_;
    }
};
int main(){
    DynamicIntegerStack s(5);
    s.print(); cout << "\n";
    s.push(1); s.push(3); s.push(5); s.push(10); s.push(15);
    s.print(); cout << "\n";
    s.push(20);
    s.print(); cout << "\n";
    cout << "Popped value is: " << s.pop() << "\n";
    s.print(); cout << "\n";
    s.push(30);
    s.print(); cout << "\n";
    s.pop();
    s.pop();
    s.print(); cout << "\n";
    while (!s.empty()) s.pop();
    if (s.num_items() != 0) {
        cout << "Error: Stack is corrupt!\n";
    }
    s.print(); cout << "\n";
    // destructor for s automatically called
    system("pause"); // execute M$-DOS' pause command
    return 0;
}

直到陣列已滿並且我調整其大小之前,它都可以正常工作。 之后,它開始打印而不是整數。 DynamicIntegerStack

在此先感謝您的幫助。

使用memcpy ,要復制的內存大小必須以字節為單位。

因此,您必須將sizeof(int)乘以n

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM