我正在开发大规模计算的应用程序,并且对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;............
是否有记忆有效且快速的方法(想尽可能少地使用内存)?我可以进行原地更改吗?文件中每个冒号之间的数据大小(包括零)是不变的。
答案 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();