所以我正在尝试编写一个带有两个参数list<item> myList
和int 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()将项添加到向量中的列表时,这就会导致分段错误。我知道如何使用指针实现函数,但函数返回的类型必须是列表的实际向量而不是指向它们的指针,所以我不能使用动态内存分配。任何帮助将不胜感激。感谢。
答案 0 :(得分:3)
reserve()
仅分配一块内存。它不会创建您正在调用list
的{{1}}个对象。您需要使用push_back()
代替resize()
来创建它们:
reserve()
或者更好,直接将计数传递给构造函数:
myVector.resize(num_items);
答案 1 :(得分:0)
reserve
仅为那么多向量元素保留空间;它不会创建任何元素,因此您无法访问它们。您希望使用resize
(或只是将大小作为构造函数参数传递),使用有效的空列表填充向量。