制作一个用c ++存储对和/或类的数组?

时间:2014-11-06 10:32:01

标签: c++ arrays class inheritance overloading

我已经找了一会儿,没有一个答案似乎完全适合我的问题,那或者我只是遇到了心理障碍。

我创建了一个设置和获取方法的类以及一个名为pairs的输出方法,它使用两个整数x + y,它们分别设置和获取方法。我需要根据下面的代码创建一个动态数组,可以存储这些对。我不想用勺子喂我只是想知道我的逻辑是否正确并且指向正确的方向。

class dynArray //a dynamic(ish) array class

{

public:

  dynArray() : data(0), sz(0) { }

  dynArray(int size) : sz(size) { data = new int[sz]; }

  virtual ~dynArray() { if(data) delete [] data; } //destructor method

  int& operator [] (int idx) { return data[idx]; } //operator overload!

  int size() { return sz; }

private:

  int * data;

  int sz;

}; 

对班

class pairs{
public:
  pairs() : x(0), y(0) { }
  void setX(int);
  void setY(int);
  void outputXY(int, int);
  int getX();
  int getY();
private:
  int *x;
  int *y;
};

void pairs::setX(int a)
{
    x = &a;
}
void pairs::setY(int b)
{
    y = &b;
}
int pairs::getX()
{
    return *x;
}
int pairs::getY()
{
   return *y;
}

void pairs::outputXY(int c, int d)
{
    x = &c;
    y = &d;

    cout << "Number 1:" << c << "  Number 2:" << d;
}

我对c ++非常生疏,所以我的逻辑已经消失了,我很难看到如何创建一个可以在一个元素中存储两个整数的数组。然后我想也许我可以使对类成为一个数组,在元素0和1中存储两个数字,然后使用动态代码创建该类的数组,弄清楚如何做到这一点让我感到难过。我真正需要的是一个有用的链接或条款,因为我真的想自己学习代码。任何帮助都会非常感谢,谢谢。

3 个答案:

答案 0 :(得分:0)

我建议使用STL库,特别是std::pair和某种容器,例如std::listsstd::vectors。为了实现一些自己的附加功能,您可以创建自己的类。

(不够&#34;声誉&#34;将此答案发布为评论......)

答案 1 :(得分:0)

如果我正确地理解了你的问题,我建议使用std :: vector来存储你的元素,因为它也可以免除内存管理的麻烦

class dynArray //a dynamic(ish) array class
{
public:
    dynArray() {}
    dynArray(int size) { data.resize(size); /* Initialize with default-constructed elements */ }
    pairs& operator [] (int idx) { return data[idx]; }
    size_t size(){ return data.size(); }
private:
    std::vector<pairs> data;
};

只需提供一些插入方法就可以了。请注意,使用上述解决方案可以大大简化设计。

user236012指出的另一个解决方案可能是使用std::pair(特别是std::pair<int,int>)并将这些对存储在向量中。

如果您打算使用配对类,请注意您的代码错误

void pairs::setX(int a)
{
    x = &a; // Address of the actual parameter - address on the stack
}

因此我建议存储普通值或按照建议使用std::pair。存储指向整数值的指针真的没什么意义(在许多架构上它们甚至更贵)。

答案 2 :(得分:0)

类似c的方式:

int * getPair(int idx) 
{
  return &data[idx*2]; 
}

void setPair(int idx, int * xy) 
{ 
  data[idx*2]=xy[0]; data[idx*2+1]=xy[1]; 
}