【问题标题】:Vector of lists列表向量
【发布时间】:2014-02-24 03:06:32
【问题描述】:

所以我正在尝试编写一个函数,它接受两个参数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() 将项目添加到向量中的列表时,这都会导致分段错误。我知道如何使用指针来实现函数,但是函数返回的类型必须是列表的实际向量而不是指向它们的指针,所以我不能使用动态内存分配。任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: c++ list vector


    【解决方案1】:

    reserve() 只是分配一块内存。它不会创建您正在调用 push_back()list 对象。您需要使用resize() 而不是reserve() 来创建它们:

    myVector.resize(num_items);
    

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

    vector<list<item>> myVector(num_items);
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2018-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-02
        • 2014-02-08
        • 2021-10-11
        • 2015-03-31
        • 2012-09-05
        相关资源
        最近更新 更多