我有一组段号。这些细分属于 具体对象。这意味着,一个对象有许多段。分割 Label告诉哪个段属于哪个对象。所以,现在我想 将我的段号与对象标签分开。
为此我写下了一段代码。假设,我知道对象的数量(比如max)。
类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.
答案 0 :(得分: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);
}
或者按照建议使用地图,看起来更适合这种情况。
答案 1 :(得分:0)
segments_per_obj里面没有任何元素。因此,当您尝试访问它的itr-&gt; Label()元素时,您的程序将崩溃。
有两种解决方案:
将空的Segment对象添加到segments_per_obj中。您应该添加itr-&gt; Label()的最大值。
对segments_per_obj