我这里有一个班级,其中包含其他级车的链表 示例
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++;
}
任何帮助将不胜感激
答案 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个元素。
总而言之,使用指针非常可疑。如果我误判了,请原谅我,事实上这些都是故意的。按照其他答案的建议来消除指针的使用。