-2

大規模コンピューティング用のアプリケーションを開発していますが、STL オブジェクトの選択や、コンピューティング リソースを最小限に抑えるためのより優れたメモリ管理手法について具体的な質問があります。

具体的には、私の質問は次のとおりです。現在、STL ベクトル obj を使用して、次のようなファイルからデータを保存しています。

x x x x 0 0 0; x x x 0 0 0 0; x x x x x x x;.........

これを次のようにしたい:

x x x x; x x x; x x x x x x x;............

これを行うためのメモリ効率的で高速な方法はありますか (可能な限り最小限のメモリを使用したい)? インプレース変更を行うことはできますか? ファイル内の各コロン間のデータ (ゼロを含む) のサイズは一定です。

4

2 に答える 2

1

数値とそのオフセットを別々のstd::vectorインスタンスに保存できます。

typedef std::vector<unsigned char> Data;
Data data;
std::vector<Data::size_type> offsets;
于 2012-12-20T06:37:45.953 に答える
0

std::remove_ifその後、次のようにstd::vector::erase使用できます。

typedef std::vector<char> data_type;

data_type vec; // fill vector...

const data_type::size_type datasize;
const data_type::size_type zerosize;
const data_type::size_type packagesize = datasize + zerosize;
size_t i = 0;

auto newend = std::remove_if(vec.begin(), vec.end(), [&](data_type::value_type){
    if(i >= datasize && i < packagesize)
        return true; // remove all zeros
    if(i >= packagesize)
        i = 0;
    return false;    // keep all other values
});

vec.erase(newend,vec.end()); // remove old values
vec.shrink_to_fit();
于 2012-12-20T07:21:33.977 に答える