Инициализация массива внутри закрытых членов класса в C ++ - PullRequest
1 голос
/ 28 марта 2020

В моей следующей реализации циклической очереди я не инициализировал array самостоятельно, и код работал нормально, но моя IDE предложила мне добавить {} сразу после объявления и определения int arr[MAX], и теперь это выглядело как как int arr[MAX] {}. Я хочу знать, в чем разница между этими двумя? Я мог бы инициализировать элементы array в 0 на int arr[MAX] = {0};. int arr[MAX]{} и int arr[MAX] = {0} одинаковы?

#include <iostream>
using namespace std;
#define MAX 8

template <class T>
class Queue {
private:
    int front, rear;
    T arr[MAX]{}; //This line over here
public:
    Queue(){
        front = rear = -1;
    }
    bool empty();
    bool full();
    void push(T);
    void pop();
    void print();
};

template <typename T>
bool Queue<T>:: empty() {
    return front == -1 && rear == -1;
}

template <typename T>
bool Queue<T>:: full() {
    return (rear + 1) % MAX == front;
}

template <typename T>
void Queue<T>:: push(T data) {
    if(full())
        cout << "Overflow" << endl;

    else {
        if(empty())
            front = rear = 0;
        else {
            rear = (rear + 1) % MAX;
        }
        arr[rear] = data;
    }
}

template <typename T>
void Queue<T>:: pop() {
    if(empty())
        cout << "Underflow" << endl;
    else {
        if(front == rear)
            front = rear = -1;
        else {
            front = (front + 1) % MAX;
        }
    }
}

template <typename T>
void Queue<T>:: print() {
    if(!empty()) {
        int count = (rear + (MAX - front)) % MAX + 1;
        for(auto i = 0; i < count; ++i) {
            int index = (front + i) % MAX;
            cout << arr[index] << " ";
        }
    }
}
int main() {
    Queue<int> qu;
    qu.push(4);
    qu.push(34);
    qu.push(324);
    qu.push(314);
    qu.push(47);
    qu.push(64);
    qu.pop();
    qu.print();
    return 0;
}

1 Ответ

0 голосов
/ 28 марта 2020

T arr[MAX]{} вызовет конструктор по умолчанию для каждого элемента массива, а для T, равного int, он установит все значения на ноль. С другой стороны, int arr[MAX] = {0} создаст массив размером MAX и затем обнулит только первый элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...