2010-12-08 68 views
5

是否有可能創建一個混合陣列的C + +和C#在C + +和C混合陣列#

我的意思是一個數組,包含字符和整數?

例如:

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

你爲什麼想要? – Beta 2010-12-08 22:33:21

+1

char是C++中的整數類型 – 2010-12-08 23:32:02

回答

3

C++你將不得不使用像std::vector<boost::tuple< , , >std::vector<std::pair>如果你只有在每個元組的兩個元素。

C++情況

實施例:爲C++情況下(使用boost::assign

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')); 

擴展例子。

using boost::assign; 

std::vector<Pair> pairs; 

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

對於C#你可能希望看到this.

+0

你可以舉一個例子來說明如何實現這個嗎? – sikas 2010-12-08 22:34:24

0

在C#和C++這是不可能創建混合類型的數組。您應該使用其他類,如C++中的std :: vector或C#中的字典< char,int >。

9

無論是C#,也沒有C++支持使用本地陣列創建這種數據結構的,但是你可以創建在C#List<Tuple<char,int>>std::vector<std::pair<char,int>>在C++。

如果其中一個元素可以被認爲是唯一鍵,那麼您也可以考慮使用Dictionary<>std::map<>集合,並且元素的順序不重要,但僅限於它們的關聯。

對於列表(而不是字典)的情況下,在C#你會寫:

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)); 

和在C++中,您應:

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

一個經典的陣列(在一個與括號)只能有一個類型,它是其聲明的一部分(如int [] nums)。沒有Array []。