C ++可变多元数组

时间:2011-10-20 08:15:59

标签: c++ arrays types mutable

我对C ++很陌生,但熟悉其他一些语言。 我想使用类似于Java ArrayList,Objective-c NSMutableArray或Python数组的数据类型,但是在C ++中。我正在寻找的特性是可以在没有容量的情况下初始化数组(因此能够逐渐添加项目),以及在一个数组中存储多个数据类型的能力。

为了详细说明我想要的是从mysql数据库的不同表读取数据,而不知道表中字段的数量,并能够移动这些数据。我理想的数据类型允许我存储这样的东西:

idealArray = [Bool error,[string array],[string array]];

其中字符串数组可能有不同的大小,大小从1到20(相对较小)。

我不知道这是否可以用C ++,任何帮助表示,或链接到良好的资源。

由于

4 个答案:

答案 0 :(得分:2)

C ++中标准动态大小的数组是std :: vector<&gt ;.除非你引入间接,否则不存在同类容器,为此你可以根据需要使用boost :: variant或boost :: any。

答案 1 :(得分:1)

您可以尝试使用std::vector<boost::any>(文档here)。

答案 2 :(得分:1)

您可以使用结构或类来存储(命名)多种数据类型,例如:

class Record
{
   bool _error;
   vector<string> _v1;
   vector<string> _v2;
};
vector<Record> vec;

或std :: tuple存储(未命名)多种数据类型,例如

vector<tuple<bool, vector<string>, vector<string> > > vec;

答案 3 :(得分:1)

我建议使用STL中的std :: vector。但请注意,C ++没有可以包含多种数据类型的容器。有多种方法可以模拟这种行为:

  1. 从某个“Base_type”派生您要存储的所有“类型”。然后将项目存储在向量std::vector<Base_type*>中,但是如果“类型”完全不同,则需要知道哪个项目在哪里以及类型为(动态)投射到哪里。
  2. 使用来自boost库的std::vector<boost::any>之类的东西(但注意到你是C ++的新手,这可能有些过分)。
  3. 事实上,您需要问的问题是,您为什么要首先将不相关的“类型”存储在“数组”中?如果他们有关系,那么“怎么样”?这将指导您为“类型”设计一个像样的“Base_type”。

    最后,简而言之,C ++没有可以包含不相关数据类型的同类数组结构。