列表向量

时间:2014-02-24 03:06:32

标签: c++ list vector

所以我正在尝试编写一个带有两个参数list<item> myListint num_items的函数,并创建一个新列表的向量。每个项目都有数据成员ID,它是向量中应该添加项目的列表的索引。任何项目的ID都保证不大于(num_items - 1)。这是我的代码:

vector<list<item>> createVector(list<item> myList, int num_items) {
   vector<list<item>> myVector;
   myVector.reserve(num_items);

   for(item& i : myList)
      myVector[i.ID].push_back(i);

   return myVector;
}

每当我尝试调用push_back()将项添加到向量中的列表时,这就会导致分段错误。我知道如何使用指针实现函数,但函数返回的类型必须是列表的实际向量而不是指向它们的指针,所以我不能使用动态内存分配。任何帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:3)

reserve()仅分配一块内存。它不会创建您正在调用list的{​​{1}}个对象。您需要使用push_back()代替resize()来创建它们:

reserve()

或者更好,直接将计数传递给构造函数:

myVector.resize(num_items);

答案 1 :(得分:0)

reserve仅为那么多向量元素保留空间;它不会创建任何元素,因此您无法访问它们。您希望使用resize(或只是将大小作为构造函数参数传递),使用有效的空列表填充向量。