私は使用しています
vector<vector<size_t>> Ar;
構造。構造体の内容は時間の経過とともに変化します。特に、ネストされた各ベクトルの長さはランダムであり、時間とともに変化します。順序は重要であり、ネストされたベクトルが空の場合は無視できません。ネストされたベクトル (m など) と外部ベクトル (n など) の最大容量を知っています。
初期化を正しく行うのに苦労しています。私が使用する場合
Ar(n);
問題はありませんが、アロケータがネストされたベクトルのサイズを認識していないため、メモリの断片化が発生します。扱おうとしているデータのサイズが大きくなると、どのような影響があるか分からないので、できれば避けたいです。ネストされたベクトルの長さを事前に修正してコンパクトな表現を取得することにより、断片化を回避しようとしますが、これを行うのに問題があります。私が使う
Ar(n,vector<size_t>(m));
ただし、ほとんどのエントリが使用されないため、これは非常に遅く、大量のメモリを浪費します。
私はこれを
vector<list<size_t> > Ar(n);
フラグメンテーションに苦しむことはありませんが、ネストされたベクトルを使用するよりもはるかに遅く実行されます。Boost::multi_array などの固定表現は、上記の 2 番目の初期化と同じ理由で、あまりにも多くのスペースを占有します。また、有用なエントリがどこで停止するかを追跡する必要があるため、実装がより困難になります。
助言がありますか?前もって感謝します。