-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_ifand 之后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 回答