c++ - 存储多个可变大小的 std 数组

标签 c++ c++20

我有不同大小的 std::arrays,例如

std::array<int, 5> array_one;
std::array<int, 8> array_two;
std::array<int, 2> array_three;
主要类型始终相同(在此示例中为 int)。
现在我必须遍历所有这些数组,为了用尽可能少的代码来做到这一点,我想我会将它们存储在例如一个数组并使用它来单独访问每个数组。
伪代码:
std::array array_wrapper = { array_one, array_two, array_three };
但这不会起作用,因为每个数组都有不同的大小。
是否有任何存储类型可以用来“收集”所有数组以在之后单独迭代它们?

最佳答案

如果您只需要迭代,而不是将数组存储在一起,请使用 std::span

std::span<int> span[] = {array_one, array_two, array_three};
您也可以使用 std::views::join 将 View 展平
for(int &i : span | std::views::join)
{
    ...
}
如果数组是常数,则
std::span<int const> span[] = {array_one, array_two, array_three};
for(int const i : span | std::views::join)
{
    ...
}

关于c++ - 存储多个可变大小的 std 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69333938/

相关文章:

c++ - 在 std::unordered_set<std::unique_ptr> (C++20) 中找到一个指针 T*

c++ - 是否可以通过共享内存从不同进程更新 Eigen3 或其他矩阵库 2D 矩阵?

c++ - 无法从后台缓冲区 (DirectX9) 捕获数据

c++ - 缩进感知原始字符串文字

c++ - 在 C++ 中将带有时区的日期时间字符串转换为 UNIX 时间戳的快速方法

c++ - std::is_convertible和std::convertible_to(在实践中)之间的区别?

c++ - 将重载函数传递给另一个函数时如何指定重载?

c++ - 等待 recv 中的数据时关闭线程

c++ - 布局在 Qt 中不起作用

c++ - 在 Vista 上调用 RPC 调用时为 "operation is not supported"