Console Library 4.7.0
A header-only library that makes C++ simple
Loading...
Searching...
No Matches
multiarray.h File Reference

提供编译期维度固定的多维数组容器 MultiArray,支持任意维度和元素级算术/逻辑/位运算。 More...

#include <iostream>
#include <array>
#include <cstddef>
#include <stdexcept>
#include <type_traits>
#include <initializer_list>
#include <algorithm>
#include <cstring>
#include "csexc.h"
#include "repr.h"

Go to the source code of this file.

Classes

class  console::MultiArray< T, D >
 一维特化。 More...
class  console::MultiArray< T, First, Rest... >
 多维特化(维度 >= 2)。 More...

Namespaces

namespace  console
 本库所有组件所在的顶层命名空间。

Functions

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::operator+ (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 元素加法(数组 + 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::operator- (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 元素减法(数组 - 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::operator* (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 元素乘法(数组 * 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::operator/ (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 元素除法(数组 / 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::operator% (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 元素取模(数组 % 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > & console::operator+= (MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 元素加法赋值(数组 += 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > & console::operator-= (MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 元素减法赋值(数组 -= 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > & console::operator*= (MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 元素乘法赋值(数组 *= 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > & console::operator/= (MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 元素除法赋值(数组 /= 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > & console::operator%= (MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 元素取模赋值(数组 %= 数组)。
template<class T, size_t... Dims>
MultiArray< bool, Dims... > console::operator== (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 元素相等比较(数组 == 数组),返回 bool 数组。
template<class T, size_t... Dims>
MultiArray< bool, Dims... > console::operator!= (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 元素不等比较(数组 != 数组)。
template<class T, size_t... Dims>
MultiArray< bool, Dims... > console::operator< (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 元素小于比较(数组 < 数组)。
template<class T, size_t... Dims>
MultiArray< bool, Dims... > console::operator> (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 元素大于比较(数组 > 数组)。
template<class T, size_t... Dims>
MultiArray< bool, Dims... > console::operator<= (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 元素小于等于比较(数组 <= 数组)。
template<class T, size_t... Dims>
MultiArray< bool, Dims... > console::operator>= (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 元素大于等于比较(数组 >= 数组)。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator+ (const MultiArray< T, Dims... > &a, const U &value)
 数组 + 标量。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator- (const MultiArray< T, Dims... > &a, const U &value)
 数组 - 标量。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator* (const MultiArray< T, Dims... > &a, const U &value)
 数组 * 标量。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator/ (const MultiArray< T, Dims... > &a, const U &value)
 数组 / 标量。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator% (const MultiArray< T, Dims... > &a, const U &value)
 数组 % 标量。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > & console::operator+= (MultiArray< T, Dims... > &a, const U &value)
 数组 += 标量。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > & console::operator-= (MultiArray< T, Dims... > &a, const U &value)
 数组 -= 标量。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > & console::operator*= (MultiArray< T, Dims... > &a, const U &value)
 数组 *= 标量。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > & console::operator/= (MultiArray< T, Dims... > &a, const U &value)
 数组 /= 标量。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > & console::operator%= (MultiArray< T, Dims... > &a, const U &value)
 数组 %= 标量。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator+ (const U &value, const MultiArray< T, Dims... > &a)
 标量 + 数组。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator- (const U &value, const MultiArray< T, Dims... > &a)
 标量 - 数组。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator* (const U &value, const MultiArray< T, Dims... > &a)
 标量 * 数组。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator/ (const U &value, const MultiArray< T, Dims... > &a)
 标量 / 数组。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator% (const U &value, const MultiArray< T, Dims... > &a)
 标量 % 数组。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::operator+ (const MultiArray< T, Dims... > &a)
 一元正号(数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::operator- (const MultiArray< T, Dims... > &a)
 一元负号(数组)。
template<class T, size_t... Dims>
MultiArray< bool, Dims... > console::operator! (const MultiArray< T, Dims... > &a)
 逻辑非(数组),返回 bool 数组。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::operator~ (const MultiArray< T, Dims... > &a)
 按位取反(数组)。
template<class T, size_t... Dims, class U>
MultiArray< bool, Dims... > console::operator== (const MultiArray< T, Dims... > &a, const U &value)
 数组 == 标量。
template<class T, size_t... Dims, class U>
MultiArray< bool, Dims... > console::operator!= (const MultiArray< T, Dims... > &a, const U &value)
 数组 != 标量。
template<class T, size_t... Dims, class U>
MultiArray< bool, Dims... > console::operator< (const MultiArray< T, Dims... > &a, const U &value)
 数组 < 标量。
template<class T, size_t... Dims, class U>
MultiArray< bool, Dims... > console::operator> (const MultiArray< T, Dims... > &a, const U &value)
 数组 > 标量。
template<class T, size_t... Dims, class U>
MultiArray< bool, Dims... > console::operator<= (const MultiArray< T, Dims... > &a, const U &value)
 数组 <= 标量。
template<class T, size_t... Dims, class U>
MultiArray< bool, Dims... > console::operator>= (const MultiArray< T, Dims... > &a, const U &value)
 数组 >= 标量。
template<class T, size_t... Dims, class U>
MultiArray< bool, Dims... > console::operator== (const U &value, const MultiArray< T, Dims... > &a)
 标量 == 数组。
template<class T, size_t... Dims, class U>
MultiArray< bool, Dims... > console::operator!= (const U &value, const MultiArray< T, Dims... > &a)
 标量 != 数组。
template<class T, size_t... Dims, class U>
MultiArray< bool, Dims... > console::operator< (const U &value, const MultiArray< T, Dims... > &a)
 标量 < 数组。
template<class T, size_t... Dims, class U>
MultiArray< bool, Dims... > console::operator> (const U &value, const MultiArray< T, Dims... > &a)
 标量 > 数组。
template<class T, size_t... Dims, class U>
MultiArray< bool, Dims... > console::operator<= (const U &value, const MultiArray< T, Dims... > &a)
 标量 <= 数组。
template<class T, size_t... Dims, class U>
MultiArray< bool, Dims... > console::operator>= (const U &value, const MultiArray< T, Dims... > &a)
 标量 >= 数组。
template<class T, size_t... Dims>
MultiArray< bool, Dims... > console::operator&& (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 逻辑与(数组 && 数组),返回 bool 数组。
template<class T, size_t... Dims>
MultiArray< bool, Dims... > console::operator|| (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 逻辑或(数组 || 数组)。
template<class T, size_t... Dims, class U>
MultiArray< bool, Dims... > console::operator&& (const MultiArray< T, Dims... > &a, const U &value)
 逻辑与(数组 && 标量)。
template<class T, size_t... Dims, class U>
MultiArray< bool, Dims... > console::operator|| (const MultiArray< T, Dims... > &a, const U &value)
 逻辑或(数组 || 标量)。
template<class T, size_t... Dims, class U>
MultiArray< bool, Dims... > console::operator&& (const U &value, const MultiArray< T, Dims... > &a)
 逻辑与(标量 && 数组)。
template<class T, size_t... Dims, class U>
MultiArray< bool, Dims... > console::operator|| (const U &value, const MultiArray< T, Dims... > &a)
 逻辑或(标量 || 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::operator& (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 按位与(数组 & 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::operator| (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 按位或(数组 | 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::operator^ (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 按位异或(数组 ^ 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::operator<< (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 左移(数组 << 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::operator>> (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 右移(数组 >> 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > & console::operator&= (MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 按位与赋值(数组 &= 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > & console::operator|= (MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 按位或赋值(数组 |= 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > & console::operator^= (MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 按位异或赋值(数组 ^= 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > & console::operator<<= (MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 左移赋值(数组 <<= 数组)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > & console::operator>>= (MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 右移赋值(数组 >>= 数组)。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator& (const MultiArray< T, Dims... > &a, const U &value)
 数组 & 标量(按位与)。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator| (const MultiArray< T, Dims... > &a, const U &value)
 数组 | 标量(按位或)。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator^ (const MultiArray< T, Dims... > &a, const U &value)
 数组 ^ 标量(按位异或)。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator<< (const MultiArray< T, Dims... > &a, const U &value)
 数组 << 标量(左移)。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator>> (const MultiArray< T, Dims... > &a, const U &value)
 数组 >> 标量(右移)。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator& (const U &value, const MultiArray< T, Dims... > &a)
 标量 & 数组(按位与,对称调用)。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator| (const U &value, const MultiArray< T, Dims... > &a)
 标量 | 数组(按位或,对称调用)。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator^ (const U &value, const MultiArray< T, Dims... > &a)
 标量 ^ 数组(按位异或,对称调用)。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator<< (const U &value, const MultiArray< T, Dims... > &a)
 标量 << 数组(左移,标量左移数组每位)。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > console::operator>> (const U &value, const MultiArray< T, Dims... > &a)
 标量 >> 数组(右移,标量右移数组每位)。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > & console::operator&= (MultiArray< T, Dims... > &a, const U &value)
 数组 &= 标量(按位与赋值)。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > & console::operator|= (MultiArray< T, Dims... > &a, const U &value)
 数组 |= 标量(按位或赋值)。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > & console::operator^= (MultiArray< T, Dims... > &a, const U &value)
 数组 ^= 标量(按位异或赋值)。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > & console::operator<<= (MultiArray< T, Dims... > &a, const U &value)
 数组 <<= 标量(左移赋值)。
template<class T, size_t... Dims, class U>
MultiArray< T, Dims... > & console::operator>>= (MultiArray< T, Dims... > &a, const U &value)
 数组 >>= 标量(右移赋值)。
template<class T, size_t... Dims>
console::sum (const MultiArray< T, Dims... > &a)
 求和所有元素。
template<class T, size_t... Dims>
console::min (const MultiArray< T, Dims... > &a)
 求最小值。
template<class T, size_t... Dims>
console::max (const MultiArray< T, Dims... > &a)
 求最大值。
template<class T, size_t... Dims>
bool console::all (const MultiArray< T, Dims... > &a)
 检查所有元素是否都为 true(逻辑与归约)。
template<class T, size_t... Dims>
bool console::any (const MultiArray< T, Dims... > &a)
 检查是否存在至少一个 true 元素(逻辑或归约)。
template<size_t... OutArrDims, class VarType, size_t... InArrDims>
MultiArray< VarType, OutArrDims... > console::multiarray_cast (const MultiArray< VarType, InArrDims... > &inputArr)
 改变 MultiArray 的维度形状(元素类型不变),要求总元素数相同。
template<class OutType, size_t... OutArrDims, class InType, size_t... InArrDims>
MultiArray< OutType, OutArrDims... > console::unsafe_multiarray_cast (const MultiArray< InType, InArrDims... > &inputArr)
 不安全地改变 MultiArray 的元素类型和维度(内存拷贝)。
template<size_t... OutArrDims, class VarType, size_t... InArrDims>
MultiArray< VarType, OutArrDims... > & console::inplace_multiarray_cast (MultiArray< VarType, InArrDims... > &inputArr)
 就地版本的 multiarray_cast,仅视图,不拷贝(可变版本)
template<size_t... OutArrDims, class VarType, size_t... InArrDims>
const MultiArray< VarType, OutArrDims... > & console::inplace_multiarray_cast (const MultiArray< VarType, InArrDims... > &inputArr)
 就地版本的 multiarray_cast,仅视图,不拷贝(常量版本)

Detailed Description

提供编译期维度固定的多维数组容器 MultiArray,支持任意维度和元素级算术/逻辑/位运算。

MultiArray 继承自 std::array 的递归嵌套,支持 operator() 多维下标访问、扁平化迭代器、 元素级运算(包括数组与数组、数组与标量)、统计函数(sum/min/max/all/any)等。

Author
MrXie1109
Date
2026