C ++多类型数组

时间:2013-10-30 09:09:54

标签: c++ arrays

是否可以在C ++中创建多个不同类型的有序元组的数组?例如,我希望能够创建一个元组数组,其中每个元组包含一个int,一个字符串和一个double?如下所示:

  vector<pair<pair<int, string>, double> >;

有了这个,我可以有一个元组(2,&#34; 3&#34;,5.43)。 这里的问题是,我一般不会事先知道元组的大小。因此,它可能只是两个元素,或五个元素,或三个,如示例和所有不同类型。订单也可能不同。是否有可能在C ++中做这样的事情,或者我将不得不切换到Python?

3 个答案:

答案 0 :(得分:8)

数组是对象(相同大小)的系统排列。在C / C ++中,您无法创建可变大小元素的数组。

但是,您可以使用多态来激活它。

创建一个抽象类型指针数组,并根据其类型强制转换数组元素。

示例:

namespace Array {
    enum Type  {
        Type1T,
        Type2T,
    };

    class AbstractType {
        public:
            virtual Type GetType() = 0;
            virtual ~AbstractType() {} 
    };

    class Type1 : public AbstractType  {
        public:
            Type GetType() { return Type1T;}

            int a;
            string b;
            double c;
    }; 

    class Type2 : public AbstractType  {
        public:
            Type GetType() { return Type2T;}

            int a;
            string b;
            string c;
            double d; // whatever you want
    };
}

创建多个不同类型的数组;

vector<Array::AbstractType*>  my_array;

答案 1 :(得分:3)

c++中的向量将使其所有元素具有相同的类型。另一种方法是你有一个vector vector,但内部向量的元素必须是同一类型。

您尝试解决的问题可能比您尝试实现的解决方案更好。有一个丑陋且绝对不可取的解决方案 - 使用vector<vector<void*> >但这既危险又不可维护。

如果只有一组给定类型的元素,则创建一个抽象类型,该抽象类型具有所有类型的实现。例如,定义MyType并在MyTypeIntMyTypeDoubleMyTypeString中继承它。比如声明一个vector<vector<MyType*> >(更好的是使用scoped_array或类似的东西而不是内部向量)。

编辑:根据nijansen的评论,如果有可用的提升,你可以创建一个Boost.Variant矢量矢量。

答案 2 :(得分:0)

所以我已经在这个名为Nile的仅标头项目中工作。在C ++中执行特定任务。 https://github.com/LUCIF680/Nile

#include"nile.h"
Array y = {50,70.2,"ram"};

它还包含来自push,pop等的多个功能。 当前它仅支持int,long,double,long double,float,std :: string,const char *