哪个STL对象或内存管理用于动态实体

时间:2012-12-20 06:25:17

标签: c++

我正在开发大规模计算的应用程序,并且对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;............

是否有记忆有效且快速的方法(想尽可能少地使用内存)?我可以进行原地更改吗?文件中每个冒号之间的数据大小(包括零)是不变的。

2 个答案:

答案 0 :(得分:1)

您可以将数字及其偏移量存储在单独的std::vector个实例中:

typedef std::vector<unsigned char> Data;
Data data;
std::vector<Data::size_type> offsets;

答案 1 :(得分: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();