8

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

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

有了这个我可以有一个元组(2,“3”,5.43)。这里的问题是,一般我事先不知道元组的大小。因此,它可能只有两个元素,或五个元素,或示例中的三个元素以及所有不同的类型。而且顺序也可能不同。是否可以在 C++ 中做这样的事情,或者我将不得不切换到 Python?

4

3 回答 3

12

数组是对象(大小相同)的系统排列。在 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;
于 2013-10-30T09:36:26.770 回答
6

向量 inc++将具有相同类型的所有元素。另一种方法是使用 a vectorof vectors,但同样,内部向量的元素必须是相同的类型。

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

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

编辑:根据 nijansen 评论,如果 boost 可用,您可以创建 Boost.Variant 的向量向量。

于 2013-10-30T09:14:18.533 回答
1

所以我已经在研究这个名为 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*

于 2019-07-29T17:48:25.587 回答