我使用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。这比你手机的功能多。