如何在main中调用链表数组?

时间:2009-04-16 13:53:18

标签: c++

我这里有一个班级,其中包含其他级车的链表 示例

class transportation
{
    private;
     int id;
     list <car> *cars;
     int keyval;
    public :
      set()
      {
      }

      void setTransportation(int ids, list <car> *carss, int keyvals)
      {
          id=ids;
          cars[keyvals]=carss[keyvals];
          keyval=keyvals;
      }

      list <car> *getCars()
      {
          return cars;  // I have to accessed cars list to be modified in my main
                        // is this how I do it ?????
       }

以上只是我的代码的摘录。我要做的是在main中设置汽车列表,因此我将在main中调用setTransportation并传入汽车列表以构建汽车的链接列表。我是否在setTransportation上做正确的事情? 由于我必须动态地将内存分配给列表车列表,我该如何在我的主函数中执行此操作?

int main()
{
    car bmw;
    transportation *ptr=new transportation;
    list <car> carList[100];
    list <transportation> transportationList;

   //other code
      if (i == 0) {
     bmw.setCar(iseq,type);
     carList[k].push_back(bmw);
     list <car> *inputList = (*ptr).getCars(); // is this how I accessed list from 
     inputList[k]=new list <car> [k];            // list class???
     (*ptr).setTransportation(iid,carList,k);
     transportationList.push_back((*ptr));
     k++;
     }

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:1)

看看iterators

答案 1 :(得分:1)

在setTransportation中,您可以传入对std :: list的引用,并将前一个列表中的所有汽车复制到后者。

这是通过迭代器(参见grahams answer)和insert-method完成的。

示例:

std::list<car> cars();
// Fill cars with values.
std::list<car> otherCars(); // We could use copy-constructor here but not relevant.
otherCars.insert(otherCars.begin(), cars.begin(), cars.end()); // First argument is the position where you want to insert the values.

setTransportation因此可能如下所示:

setTransportation(int id, const std::list<car> &cars, int keyvals)
{
    id = id;
    this->cars.insert(this->cars.begin(), cars.begin(), cars.end());
    keyvals = keyvals;
}

请注意,您必须将运输中的“汽车”类型更改为“std :: list&lt; car&gt;”而不是“std :: list&lt; car&gt; *”,它是指向汽车列表的指针。

如果您有“using namespace std;”在文件的顶部,您不需要列表前面的std :: - 前缀&lt; T&gt;。

答案 2 :(得分:1)

您的示例中有相当数量的可疑代码。我想指出其中的一些,以确保您的代码的含义实际上反映了您的意图。

 list <car> *cars;

这是指向汽车列表的指针。指针可能不是必需的

 list <car> carList[100];

这是“100个元素的汽车对象列表数组”。您可能认为自己制作了“长达100个元素的汽车对象列表”,但事实并非如此。

 inputList[k]=new list <car> [k];

我认为这会创建一个新的列表对象'k'元素数组,并将其分配给'inputList'的第k个元素。

总而言之,使用指针非常可疑。如果我误判了,请原谅我,事实上这些都是故意的。按照其他答案的建议来消除指针的使用。