I'd like to create an array in compile-time. The problem is, that it's gonna be huge(int arr[8000000]), so recursion with variadics or Nested Structures ain't gonna work. Global array has to be initialised while created, and it isn't jus a simple fill {0}. Does anyone have any idea how-to? For the matter of this post, lets say i want to have arr[i]=i.
Asked
Active
Viewed 193 times
0
-
Write a script that will generate your array as a header file and include it elsewhere? – freakish Oct 11 '18 at 09:07
-
I suspect put **8000000** int on static memory is not good idea. Maybe load from file? – apple apple Oct 11 '18 at 09:10
-
@Zinki for 8000000 elements it cant be initialised in brackets, and recursion-depth is a blocker for variadics – Farkor123 Oct 11 '18 at 09:10
-
@freakish i need it to be in one file, i'll add that to the post – Farkor123 Oct 11 '18 at 09:10
-
1@Farkor123 That's a weird requirement. What C++ version are we talking about? `constexpr` looping in C++14 is a valid option as well. – freakish Oct 11 '18 at 09:11
-
@appleapple i have lots memory but tiny time limits – Farkor123 Oct 11 '18 at 09:11
-
@freakish You misunderstood. I need it to be just one-filer, and the testing machine for my code will have lots of memory, but each test needs to be at worst 1s long, but compile-time is not included. What do you mean by constexpr looping? – Farkor123 Oct 11 '18 at 09:13
-
@Farkor123 Ok, but I still don't understand why "one file" is a necessary requirement? You surely don't write entire code in a single file, do you? – freakish Oct 11 '18 at 09:15
-
@Farkor123 Have a look at the third answer in the link posted by Zinki. – freakish Oct 11 '18 at 09:16
-
@Farkor123 there are multiple answers in the linked thread, at least one of which appears to satisfy your requirements (no recursion, no nested structures). – Zinki Oct 11 '18 at 09:18
1 Answers
1
You might use constexpr
function, something like:
constexpr auto make_huge_array()
{
std::array<int, 8'000'000> res{};
std::size_t i = 0;
for (auto& e : res) {
e = i++;
}
return res;
}

Jarod42
- 203,559
- 14
- 181
- 302
-
nope, 'uninitialised res in constexpr' error. Even if you initialise it, then it's 'call to non-constexpr function std::array::value_type* std::array::begin()' err :/ – Farkor123 Oct 12 '18 at 17:47
-
-