0

セグメント番号のセットがあります。これらのセグメントは、特定のオブジェクトに属しています。つまり、1 つのオブジェクトには多くのセグメントがあります。セグメント ラベルは、どのセグメントがどのオブジェクトに属しているかを示します。そこで、オブジェクト ラベルに関してセグメント番号を分割したいと思います。

そのために、以下のコードを書きました。オブジェクトの数を知っていると仮定します (たとえば、最大)。

クラス 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_per_obj に追加します。itr->Label() の最大値と同じ数を追加する必要があります。

  2. Segments_per_obj にはベクトルの代わりにマップを使用してください

于 2013-07-04T21:56:04.680 に答える