天天看點

Stack Implementation 1000.Stack Implementation

1000.Stack Implementation

時間限制:1秒 記憶體限制:256兆

題目描述

Implement the following Stack:

typedef int Stack_entry;

class Stack {

public:

// Standard Stack methods

Stack();

bool empty() const;

void push(const Stack_entry &item);

void pop();

const Stack_entry & top() const;

// Safety features

~Stack();

Stack(const Stack &original);

void operator =(const Stack &original);

};

typedef Stack MyStack;

//or if your are using templates

typedef Stack MyStack;

提示

Submit your implementations only.

本題有意思的點:

  • 拷貝構造函數和指派運算符

    拷貝構造函數與指派運算符重載函數

1.自定義拷貝構造函數是一種良好的程式設計風格,它可以阻止編譯器形成預設的拷貝構造函數,防止出錯。
2.一般來說,如果類需要複制構造函數,也就需要指派操作符。

我的代碼>>>

// EE_While  Sicily
// E-mail:[email protected] 
// SUN YAT-SEN UNIVERSITY 17 SDCS
// A master also used to be a novice.

typedef int Stack_entry;

class Stack {
public:                     
    Stack_entry str[100];// 定義棧的容量 
    int pos;//目前表達式位置 或 棧内元素數量 
    
    Stack() {
        pos = 0;//空棧 
    }
    
    bool empty() const {
        return pos == 0;//如果棧空,傳回true,否則傳回false 
    }
    
    int size() const {
        return pos;//傳回棧内元素數量 
    }
    
    void push(const Stack_entry &item) {
        str[pos++] = item;//元素入棧 
    }
    
    void pop() {
        if (pos == 0) return;//若棧為空,無操作 
        pos--;//元素出棧 
    }
    
    Stack_entry top() const { 
        if (pos == 0) return -1;//若棧為空,無操作  
        return str[pos - 1];// 擷取棧頂元素 
    }
    
    ~Stack() {}//析構函數 
    
    Stack(const Stack & original) {//拷貝構造函數
    	for (int i = 0; i < original.pos; i++) {
            str[i] = original.str[i];
    	}
    	pos = original.pos;
    }
    
    void operator = (const Stack & original) {//指派運算符重載
        *this = original;
    }
};

typedef Stack MyStack;
           

from:EE_While

Email:[email protected]

繼續閱讀