C++ - Lista dwukierunkowa i definiowanie zmiennej statycznej

Potrzebujesz pomocy z C, C++, perl, python, itp.
Awatar użytkownika
Dudi879
Beginner
Posty: 106
Rejestracja: 15 września 2013, 10:47

C++ - Lista dwukierunkowa i definiowanie zmiennej statycznej

Post autor: Dudi879 »

Witam.
Mam do napisania w C++ listę. Utworzyłem wszystko jako statyczne, bo będę używał tak czy siak tylko jednej instancji.
Oto nagłówek klasy List - list.h:

Kod: Zaznacz cały

#pragma once

class List
{
public:
    class ogniwo
    {
        public:
        static ogniwo * next;
        static ogniwo * prev;
        static int value;
    };
    class iterator
    {
        public:
        static ogniwo * ptr;
        // Returns a pointer to the next element
        static iterator next(iterator it);
    };

    static List* list;

    static  int repeats,
            size,
            init_list_size,
            HEIGHT,
            WIDTH;

    static double   time_delete_first,
                    time_delete_last,
                    time_delete_random,
                    time_add_first,
                    time_add_last,
                    time_add_random;

    static iterator first;
    static iterator last;
    /* iterator first; */
    /* iterator last; */

    // Constructor, creates a new list with 1 element with value v 
    List(int HEIGHT, int WIDTH, int v); 

    // Destructor
    ~List();

    // Shows all values of the list
    static void showAllValues();

    // Adds new element with value v behind item indicated by its pointer
    static iterator insert_list(iterator it, int v);

    // Removes element indicated by it pointer
    static iterator removeListItem(iterator it);

    // Returns beginning of the list
    static iterator begin();

    // Returns end of the list
    static iterator end();

    // Returns true if value v in the list
    static bool isInList(int v);
};

Jendak z racji tego, ze to zmienne statyczne, nie mam pojęcia jak w List.cpp nadać początkową wartość (co jest konieczne) zmiennym first i last (znaki zapytania):

Kod: Zaznacz cały

#include <iostream>
#include <ncurses.h>
#include "List.h"

using namespace std;

/* initialization of variables */
int List::HEIGHT = 0;
int List::WIDTH = 0;
int List::repeats = 100;
int List::size = 0;
int List::init_list_size = 10000;
iterator List::first = ???
terator List::last = ???
double List::time_delete_first = 0;
double List::time_delete_last = 0;
double List::time_delete_random = 0;
double List::time_add_first = 0;
double List::time_add_last = 0;
double List::time_add_random = 0;
...
(dalej to już mało istotne)
Jak to można ugryźć?
Awatar użytkownika
lizard
Beginner
Posty: 287
Rejestracja: 08 lutego 2016, 18:47

Post autor: lizard »

Znam tylko podstawy C++, ale może poniższe wystarczy:

Kod: Zaznacz cały

iterator List::first.ptr = &f_ogniwo;
iterator List::last.ptr = &l_ogniwo;
Nie lepiej, aby klasa iterator dziedziczyła po ogniwo, a List dziedziczyła po iterator? To, że używasz tylko jednej instancji klasy List nie znaczy, że używanie jej statycznie jest dobrym pomysłem. To tak, jak stosowanie wyłącznie zmiennych globalnych w programowaniu strukturalnym.
ODPOWIEDZ