2010-12-08 7 views
5

Est-il possible de créer un tableau mixte dans les deux C++ et C#tableaux mixtes en C++ et C#

Je veux dire un tableau qui contient les caractères et ints?

ex:

Array [][] = {{'a',1},{'b',2},{'c',3}}; 
+0

Pourquoi voudriez-vous? – Beta

+1

Un char est un type entier en C++ –

Répondre

3

En C++ vous devez utiliser quelque chose comme std::vector<boost::tuple< , , > ou std::vector<std::pair> si vous avez seulement deux éléments dans chaque tuple.

Exemple pour le cas C++:

typedef std::pair<int, char> Pair; 

std::vector<Pair> pairs; 

pairs.push_back(Pair(0, 'c')); 
pairs.push_back(Pair(1, 'a')); 
pairs.push_back(Pair(42, 'b')); 

exemple prolongée pour le C++ cas (en utilisant boost::assign).

using boost::assign; 

std::vector<Pair> pairs; 

pairs += Pair(0, 'c'), Pair(1, 'a'), Pair(42, 'b'); 

Pour C# vous voudrez peut-être voir this.

+0

pouvez-vous donner un exemple sur la façon d'y parvenir? – sikas

+0

std :: vecteur préféré – Svisstack

0

en C# et C++, il est impossible de créer un tableau de types mixtes. Vous devriez utiliser d'autres classes comme std :: vector en C++ ou Dictionary < char, int > en C#.

9

Ni C#, ni le soutien de C la création de ce type de structure de données en utilisant des réseaux natifs, mais vous pouvez créer un List<Tuple<char,int>> en C# ou un std::vector<std::pair<char,int>> en C++.

Vous pouvez également envisager d'utiliser les collections Dictionary<> ou std::map<> si l'un des éléments peut être considéré comme une clé unique, et que l'ordre des éléments n'est pas important mais seulement leur association.

Pour le cas des listes (plutôt que des dictionnaires), en C# vous écririez:

List<Tuple<char,int>> items = new List<Tuple<char,int>>(); 

items.Add(new Tuple<char,int>('a', 1)); 
items.Add(new Tuple<char,int>('b', 2)); 
items.Add(new Tuple<char,int>('c', 3)); 

et en C++ vous pouvez écrire:

std::vector<std::pair<char,int>> items; // you could typedef std::pair<char,int> 
items.push_back(std::pair<char,int>('a', 1)); 
items.push_back(std::pair<char,int>('b', 2)); 
items.push_back(std::pair<char,int>('c', 3)); 
+0

au lieu de std :: paire ('a', 1), vous pouvez simplement utiliser std :: make_pair ('a', 1), que le stdlib offre pour votre commodité :) – etarion

+0

Pourquoi couldn Ne fait-il pas un tableau de paires/tuples? Y at-il une raison pour laquelle je ne vois pas pourquoi sa seule option est de passer à List/vector? – jalf

+0

@jalf Les conteneurs pilotés par STL sont susceptibles d'être moins sujettes aux erreurs que les tableaux génériques. –

0

Un tableau classique (celui avec le parenthèses) ne peut avoir qu'un type, qui fait partie de sa déclaration (comme int [] nums). Il n'y a pas de tableau [].