Partage
  • Partager sur Facebook
  • Partager sur Twitter

Un vector static

20 février 2018 à 22:51:35

Bonjour, j'ai une class dans laquelle je souhaite avoir un vector de char[size].

J'ai donc fait ca:

# include <vector>
# define SIZE_GRID 19

class FreeThree
{
	public:
							FreeThree(Grid const &grid);

	private:
		...
		static std::vector<char[SIZE_GRID]> hash_unavalable(SIZE_GRID);
		...
};

J'ai 2 problèmes :D

  • Mon compilateur ne veux pas de ...(SIZE_GRID). Comment je peux faire pour indiquer que ce vector doit avoir une taille de depart precise?
  • Maintenant, je voudrai initialiser ce vector a 0 pour toutes les cases. Je dois faire une boucle, ou il existe une autre syntaxe?

Merci beaucoup :)

  • Partager sur Facebook
  • Partager sur Twitter
20 février 2018 à 22:59:20

La définition des variables membres static non const est un peu chi... 

// dans le .h
class A {
    static int x;
};

// dans le .cpp
int A::x = 1234;

Pour l'initialisation... j'ai un doute.

(HS : std::array ? Ou linearise le tableau ? Ou un std::string linéarisé)

  • Partager sur Facebook
  • Partager sur Twitter
21 février 2018 à 0:35:49

Bonjour 

sache le que quand tu déclare une attribut :

static vector<char[SIZE_GRID]> tab(SIZE_GRID);

tu déclare un tableau de classe(pas d'instance) qui a 19 cases mémoires dont chacune d'elle contiendra un tableau de 19 caractères(on peut aussi dire une chaine de caractère du type langage C.

mais sache le qu'en C++ il y a un moyen très pratique d'utiliser des chaines de caractères, cela est rendu possible avec le type string, qui peut contenir un grand nombre de caractère.

alors moi je te proposerai de faire ceci:

static vector<string> tab(SIZE_GRID); //Si tu tiens vraiment à ton macro qui vaut 19

et sache le que le macro est interdit en C++ car c'est vraiment une source des erreurs.:p

-
Edité par EL-jos 21 février 2018 à 0:47:46

  • Partager sur Facebook
  • Partager sur Twitter

Ton présent détermine ton futur et la connaissance te placera au dessus de ta génération .

21 février 2018 à 6:04:43

Hello

Pour l'initialisation, il y a ce constructeur qui peux faire le job :

explicit vector( size_type count,

                 const T& value,
                 const Allocator& alloc = Allocator());

Ou encore celui la (qui utilise la valeur par défaut de T) :

explicit vector( size_type count, const Allocator& alloc = Allocator() );


Après je rejoins gbdivers sur ce point : tu devrais probablement linéariser tout ça.

HS : Je vois un tableau de 19 par 19... Jeu de Go?

  • Partager sur Facebook
  • Partager sur Twitter
21 février 2018 à 9:18:09

Bonjour, 

gbdivers a écrit:

La définition des variables membres static non const est un peu chi... 

Ah, je ne savais pas ca:euh:, je ne peux donc pas faire ca... je vais lieariser ce tableau;) 

EL-jos a écrit:

et sache le que le macro est interdit en C++ car c'est vraiment une source des erreurs.:p

-
Edité par EL-jos il y a environ 8 heures

J'ai fait beaucoup de C je suis donc habitué a utiliser des defines. Je vais revoir ma classe grid pour lui ajouter une variable static const size.

Elried a écrit:

HS : Je vois un tableau de 19 par 19... Jeu de Go?


Presque :D, je fais une IA pour le jeu de gomoku, c' est tres proche du jeu de go

Merci pour vos réponses, je vais suivre vos conseils et lineariser la gille 

Bonne journee

  • Partager sur Facebook
  • Partager sur Twitter
21 février 2018 à 18:59:18

Bonjour,

Pour les constantes, en c++ il y a 'constexpr' , par exemple :

constexpr std::size_t GRID_SIZE = 19;

:)

  • Partager sur Facebook
  • Partager sur Twitter

Mon site web de jeux SDL2 entre autres : https://www.ant01.fr