计算对数组编译时中对元素的差异
Compute differences of pair elements in array of pairs compile time
在下面的代码中,我的目标是构造一个N
元素数组,其中包含两个std::pair
元素编译时间之间的差异。有没有办法使用模板来实现这一点,因为它必须适用于任意大小的N
?
#include <array>
#include <utility>
template<int N>
std::array<int, N> make_array(
const std::array<std::pair<int, int>, N>& ranges)
{
// Need to construct array compile time with difference between pair elements.
}
int main()
{
std::array<int, 2> a = make_array<2>({{ {1,3}, {2,9} }}); // a = {2, 7}
std::array<int, 1> b = make_array<1>({{ {5,6} }}); // b = {1}
return 0;
}
如果你可以使用 C++14(所以std::make_index_sequence
/std::index_sequence
),这很容易
#include <array>
#include <utility>
template <std::size_t N, std::size_t ... Is>
constexpr std::array<int, N> makeArrayHelper
(std::array<std::pair<int, int>, N> const & r,
std::index_sequence<Is...> const)
{ return {{ r[Is].second - r[Is].first ... }}; }
template <std::size_t N>
constexpr auto makeArray (std::array<std::pair<int, int>, N> const & r)
{ return makeArrayHelper(r, std::make_index_sequence<N>{}); }
int main ()
{
constexpr std::array<int, 2> a
= makeArray<2>({{ {1,3}, {2,9} }}); // a = {2, 7}
constexpr std::array<int, 1> b
= makeArray<1>({{ {5,6} }}); // b = {1}
static_assert( a[0] == 2, "!" );
static_assert( a[1] == 7, "!" );
static_assert( b[0] == 1, "!" );
}
PS:我重命名makeArray()
函数,以降低与make_array()
发生名称冲突的风险std::experimental
您可以简单地执行循环:
template <std::size_t N>
constexpr std::array<int, N> make_array(
const std::array<std::pair<int, int>, N>& ranges)
{
std::array<int, N> res{};
for (std::size_t i = 0; i != N; ++i) {
res[i] = ranges[i].second - ranges[i].first;
}
return res;
}
自 C++17 年以来可能会constexpr
。
演示
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 如何将元素添加到数组的线程安全函数?
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 输出没有重复元素的动态数组(收缩数组)C++
- 数组中最大的非重复元素
- 数组元素打印的递归方法
- 对字符数组中的元素执行逐位操作
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 通过交换元素使数组相同
- 按平均值替换数组中的元素
- 打印矢量数组中的所有元素
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 如何将元素从向量转移到新数组?
- 如何在向量数组中插入元素?
- 为什么 2 个相同数组的元素彼此相等
- C++ 中的二维整数数组,每行中的元素数量不均匀