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

C++ 哪个STL对象或内存管理用于动态实体,c++,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;............ 是否有一种有效且快速的方法来实现这一点(希望使用尽可能少的内存)?我可以就地更改

我正在开发用于大规模计算的应用程序,对于如何选择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;............

是否有一种有效且快速的方法来实现这一点(希望使用尽可能少的内存)?我可以就地更改吗?文件中每个冒号之间的数据大小(包括零)是恒定的。

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

typedef std::vector<unsigned char> Data;
Data data;
std::vector<Data::size_type> offsets;
typedef std::向量数据;
数据;
std::矢量偏移;
您可以使用,然后使用
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();
typedef std::向量数据类型;
数据类型vec;//填充向量。。。
常量数据类型::大小类型数据大小;
常量数据类型::大小类型zerosize;
常量数据类型::大小类型packagesize=datasize+zerosize;
尺寸i=0;
auto newend=std::remove_if(vec.begin(),vec.end(),[&](数据类型::值类型){
如果(i>=datasize&&i=packagesize)
i=0;
返回false;//保留所有其他值
});
vec.erase(newend,vec.end());//删除旧值
vec.收缩到合适的尺寸();

我从文件中一次性读取并存储在向量中。问题是如何将这个向量转换成我需要的向量?我从文件中读取向量。问题是如何快速有效地将向量处理成我需要的格式存储为一个元素还是整个字符串存储为一个元素?我将其存储为整数向量。我用分号只是为了举例说明。你的问题毫无意义。那些
x
s和
0
s是什么?这个
向量
中的元素类型是什么?@SumanVajjala:你所说的向量是什么意思?这是否意味着直接在向量中读取数据?或者是否有可能将它们读取到自定义的双/单链接列表中?有时,与标准STL不同,自编链接列表似乎有助于使用更快/更好的内存管理算法进行自定义活动。该算法是否收集向量中包含零的位置列表并将其删除?因为您的信息不一致:当前的“算法”收集具有以下格式的所有数据:数据大小字节数据、零大小零(正在删除)。如果您只想删除零,请使用
std::remove(vec.begin(),vec.end(),0)