0

我有一组段号。这些段属于特定对象。这意味着,一个对象有许多段。段标签告诉哪个段属于哪个对象。所以,现在我想根据对象标签拆分我的段号。

为此,我在下面写了一段代码。假设,我知道对象的数量(比如最大值)。

Segments 类是用 Segment 的向量定义的

Segments  mysegments;
Segments::const_iterator  itr;
vector<Segments>  segments_per_obj;

segments_per_obj.resize(max);

for (itr= mysegments.begin(); itr!= mysegments.end(); itr++){          
    segments_per_obj[itr->Label()].push_back(*itr); 
 }

当我编译时,它不会给出任何错误。但是当我运行(myprog.exe)时,它会退出我的程序并给出错误窗口告诉

myprog.exe has encountered a problem and needs to close. We are sorry for the inconvenience.
Please tell Microsoft about this problem.
4

2 回答 2

1

尝试这个:

Segments  mysegments;
Segments::const_iterator  itr;
vector<Segments>  segments_per_obj;


for (itr= mysegments.begin(); itr!= mysegments.end(); itr++)
{          
    int index = itr->Label();
    for (int i = segments_per_obj.size(); i <= index; ++i)
    {
        segments_per_obj.push_back(<create a new segment>);
    }

    segments_per_obj[index].push_back(*itr); 
}

或者按照建议使用地图,看起来更适合这种情况。

于 2013-07-04T21:54:44.993 回答
0

segment_per_obj 里面没有任何元素。因此,当您尝试访问它的 itr->Label() 元素时,您的程序将崩溃。

有2个解决方案:

  1. 将空的 Segment 对象添加到 segments_per_obj 中。您应该添加尽可能多的 itr->Label() 的最大值。

  2. 对segments_per_obj 使用地图而不是矢量

于 2013-07-04T21:56:04.680 回答