我正在使用
std::vector
在编译时计算一些数据,并希望将结果作为数组返回,以便可以在运行时进一步使用。我在不进行两次计算的情况下设置数组大小时遇到问题。
这是我迄今为止所做的一个简化示例。代码编译并按预期工作。
constexpr auto make_vector() {
// complex calculation here
return std::vector{1, 2, 3};
}
constexpr auto make_array() {
const auto vec = make_vector();
std::array<int, make_vector().size()> result{};
std::copy(vec.cbegin(), vec.cend(), result.begin());
return result;
}
int main() {
constexpr auto result = make_array(); // std::array<int, 3>{1, 2, 3}
}
我理解为什么不能使用
vec.size()
来表示数组大小以及为什么 make_vector().size()
会产生编译时常量。做两次似乎不是“正确”的方法。
有没有办法避免拨打make_vector
两次?我在这里错过了基本概念吗?
#include <algorithm>
#include <array>
#include <iostream>
#include <vector>
constexpr std::vector<int> make_vector() {
std::vector<int> vec_rtrn{ 1, 2, 3 };
// complex calculation here
return vec_rtrn;
}
constexpr auto make_array() {
const auto vec = make_vector();
std::array<int, make_vector().size()> result;
std::copy(vec.cbegin(), vec.cend(), result.begin());
return result;
}
int main() {
constexpr auto result = make_array(); // std::array<int, 3>{1, 2, 3}
std::for_each(result.begin(), result.end(), [](const int el) {std::cout << el << ' '; });
}
我没有进行计算,而是让向量包含值 1、2、3。 运行程序会显示数组值 1、2 和 3。