C++填充多维标准::数组
C++ filling multidimensional std::arrays
要声明一个矩阵,其所有元素都具有一定的值,使用std::array
我知道的唯一方法如下所示:
std::array<std::array<int, dim_1>, dim_2> matrix;
for (auto it = matrix.begin(); it != matrix.end(); ++it)
std::fill(it->begin(), it->end(), number);
有没有更好、更简洁的方法?
auto matrix = std::array<std::array<int, 4>, 4>();
const auto value = 64;
单行:
std::for_each(matrix.begin(), matrix.end(), [value](auto& column) { std::for_each(column.begin(), column.end(), [value](auto& element) {element = value; }); });
另一个:
std::for_each(matrix.begin(), matrix.end(), [value](auto& column) { std::fill(column.begin(), column.end(), value); });
实际上可读的东西:
for (auto& column : matrix) {
for (auto& element : column) {
element = value;
}
}
我不知道这些是否真的是列
这也在最新的MSVC上编译,看起来很有趣:
std::fill(matrix.begin(), matrix.end(), std::array{ value, value, value, value });
如果你正在寻找简洁,你可以用一个填充数组来填充它:
decltype(matrix[0]) temp;
temp.fill(5);
matrix.fill(temp);
从技术上讲,您可以删除临时维度(假设为非零维度(:
matrix[0].fill(5);
matrix.fill(matrix[0]);
为了使它执行并填充到位,您必须依靠编译器来透视它。或者,您可以从 C++20 开始将其放入constexpr
函数中,并根据需要保证编译时结果。
使用辅助功能:
namespace detail
{
template <typename T, std::size_t...Is>
constexpr std::array<T, sizeof...(Is)>
make_array(const T& value, std::index_sequence<Is...>)
{
return {{(static_cast<void>(Is), value)...}};
}
}
template <std::size_t N, typename T>
constexpr std::array<T, N> make_array(const T& value)
{
return detail::make_array(value, std::make_index_sequence<N>());
}
然后
/*const*/ auto matrix = make_array<dim_2>(make_array<dim_1>(value));
与fill
相比,它的优势在于它支持非默认的可构造类型。
与之后的赋值相比,辅助函数(即使使用std::fill
实现(的优势在于您可以初始化const
变量:)
相关文章:
- 将值插入到标准 c++ 数组的正确索引(升序)中
- 效率:标准::数组与标准::矢量
- 多维标准::数组的可变参数模板
- 如何将临时数组传递给标准 C++17 中的函数
- 声明后,gcc 的动态大小数组是否与标准数组有效相同?
- 如何初始化一个标准::字符串数组?
- C++填充多维标准::数组
- 如何声明 2D 标准::数组
- 如何查找 2d 标准::数组中的列数
- 如何使用数组查找标准偏差
- 将积分类型的数组作为另一个不相关的积分类型的阵列进行访问的安全且符合标准的方法
- 如何将 C 数组转换为标准::initializer_list?
- 基于多维标准::数组的范围
- 两个标准::数组的交叉部分
- 如何按降序对标准数组进行排序 - C++ 11.
- 优雅地声明 2 维(甚至多维)标准::数组
- 如何将标准::数组转换为标准::元组?
- 此代码中的数组初始化样式是什么?这是标准的吗?
- 获取别名标准::数组的大小
- 标准对 char 数组作为模板参数有什么看法?