在android上,向量置换溢出问题



我使用next_permutation函数来进行向量列表排列,但是由于向量

的大小,堆栈在运行程序时溢出。
#include <vector>
#include <algorithm>
vector<int> uuid_list_index;
vector<vector<int>> permutation_uuid_lists;
for(size_t i=0; i<12; i++)
{
uuid_list_index.push_back(i);
}
do permutation_uuid_lists.push_back(uuid_list_index);
while(next_permutation(uuid_list_index.begin(), uuid_list_index.end()));

运行程序时,二进制溢出崩溃,如何实现list{0,1,2,3,4,5,6,7,8,9,10,11,12}的置换函数?

这一点都不奇怪。uuid_list_index有12个不同的条目

长度为N的序列的排列个数为N!和
12 != 479001600.

permutation_uuid_lists包含4.79亿个std::vector<int>s;因为每个向量至少有一个12字节的头(armv8),并且包含一个指向至少12× 4字节整数内存元素的指针,加上意味着内存分配表中有一个16字节的条目:您正在尝试使用大约30 GB的RAM。这比你手机的功能多。

最新更新