【发布时间】:2010-12-08 22:29:55
【问题描述】:
是否可以在 C++ 和 C# 中创建混合数组
我的意思是一个包含字符和整数的数组?
例如:
Array [][] = {{'a',1},{'b',2},{'c',3}};
【问题讨论】:
-
char 是 C++ 中的整数类型
是否可以在 C++ 和 C# 中创建混合数组
我的意思是一个包含字符和整数的数组?
例如:
Array [][] = {{'a',1},{'b',2},{'c',3}};
【问题讨论】:
C# 和 C++ 都不支持使用原生数组创建这种数据结构,但是您可以在 C# 中创建 List<Tuple<char,int>> 或在 C++ 中创建 std::vector<std::pair<char,int>>。
如果元素之一可以被视为唯一键,并且元素的顺序并不重要,而只是它们的关联关系,您也可以考虑使用 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 ) );
【讨论】:
在C++ 中,如果每个元组中只有两个元素,则必须使用std::vector<boost::tuple< , , > 或std::vector<std::pair> 之类的内容。
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'));
C++ 案例的扩展示例(使用 boost::assign)。
using boost::assign;
std::vector<Pair> pairs;
pairs += Pair(0, 'c'), Pair(1, 'a'), Pair(42, 'b');
对于C#,您可能想查看this.
【讨论】:
在 C# 和 C++ 中,无法创建混合类型的数组。您应该使用其他类,例如 C++ 中的 std::vector 或 C# 中的 Dictionary
【讨论】:
经典数组(带括号的数组)只能有一种类型,这是其声明的一部分(如 int[] nums)。没有数组[]。
【讨论】: