Console Library 8.0.0
A header-only library that makes C++ simple
Loading...
Searching...
No Matches
console Namespace Reference

本库所有组件所在的顶层命名空间。 More...

Namespaces

namespace  _V1
namespace  _V2
namespace  alg
namespace  color
 包含控制台颜色、背景色和文本样式的 ANSI 转义序列常量。
namespace  crypto
 密码学相关的命名空间。
namespace  details
namespace  gen
namespace  ops
namespace  pitches
namespace  pool
namespace  ProgressStyle
namespace  re

Classes

struct  _multi_array_base
 编译期固定维度的多维数组元数据。 More...
class  AssertError
 表示断言失败的错误。 More...
class  AsyncError
class  BadFormat
 表示格式化字符串错误,例如占位符与参数不匹配。 More...
class  BasicINIConfig
 INI 配置文件操作类。 More...
struct  BasicInputSettings
 输入/输出流设置,用于自定义 input 函数的输入输出目标。 More...
class  BasicLogging
 日志记录器,支持多级别、颜色输出和自动时间戳。 More...
class  BasicOutput
 灵活的输出控制类,支持链式调用和多种参数。 More...
struct  BasicPartitionResult
 字符串分区结果,包含左部分、分隔符、右部分。 More...
class  BasicPath
 文件路径封装类,提供便捷的文件读写和路径操作。 More...
class  BasicProgress
 进度条迭代器包装器,用于在遍历容器时显示进度。 More...
struct  BasicProgressConfig
 进度条显示配置。 More...
class  BasicRational
 用于表示分数的基础模板类。 More...
class  BasicRegex
 正则表达式对象,封装编译后的模式,提供匹配、搜索、替换等功能。 More...
struct  BasicTuplePrinter
 递归打印 tuple 的辅助模板(主模板)。 More...
struct  BasicTuplePrinter< CharT, Traits, Tuple, 0 >
 递归打印 tuple 的偏特化:处理空 tuple。 More...
struct  BasicTuplePrinter< CharT, Traits, Tuple, 1 >
 递归打印 tuple 的偏特化:处理单个元素。 More...
class  Box
 存储多个 Item 的异构容器。 More...
class  Channel
 环形缓冲区通道,用于线程间通信。 More...
class  Channel< T, 0 >
class  ChannelIterator
 通道迭代器。 More...
class  CmdResult
 命令执行结果封装类。 More...
class  ColorGuard
 RAII颜色守卫,构造时设置颜色,析构时自动恢复。 More...
class  ConsoleError
 console 库所有异常的基类。 More...
class  ContainerError
 表示通用容器操作错误。 More...
class  Coroutine
 协程/生成器包装器。 More...
class  Coroutine< Ret(Args...)>
class  Cow
 写时复制数据类。 More...
class  DateTime
class  DeferGuard
 推迟执行的RAII守卫类。 More...
class  DomainError
 表示试图对无效的数学值域进行操作时抛出的异常。 More...
class  Event
 线程同步事件类,用于线程间通信。 More...
struct  ExitStatus
 进程退出状态,包含完整退出信息。 More...
class  FatalLogging
 表示致命日志错误,通常会导致程序终止。 More...
class  FileError
 表示文件操作错误,如打开失败、读取失败等。 More...
class  Generator
 生成器模板类,用于创建可迭代的序列生成器。 More...
class  Group
 异步任务组,用于管理一组异步任务的执行。 More...
struct  has_subscript
 检测类型是否支持下标操作符(如 T[Idx])。 More...
struct  ignore_t
 忽略任意参数的函数对象类型。 More...
class  IndexError
 表示索引越界错误。 More...
struct  is_basic_printable
 检测类型是否支持输出到指定字符类型的流(即定义了 operator<<)。 More...
struct  is_callable_impl
struct  is_callable_impl< F(Args...), void_t< decltype(std::declval< F >()(std::declval< Args >()...))> >
struct  is_char
 检测类型是否为字符类型(char、wchar_t 等)。 More...
struct  is_container
 检测类型是否为容器(支持 std::begin 和 std::end)。 More...
struct  is_generator
 检测类型是否为生成器(具有 done()、current()、advance() 接口)。 More...
struct  is_iterator
 检测类型是否为迭代器(具有 iterator_category)。 More...
struct  is_printable
 检测类型是否支持输出到 std::ostream(即定义了 operator<<)。 More...
struct  is_string
 检测类型是否为字符串类型(char*、std::string、std::string_view 等)。 More...
class  Item
 可存储任意类型单个对象的类型擦除包装器。 More...
struct  IteratorPair
 存储迭代器对,可以直接范围 for。 More...
class  Keyboard
 用于监视键盘键击情况的类。 More...
class  LFQueue
 基于自旋的高性能 FIFO 队列,支持多生产者/多消费者并发。 More...
class  Maybe
 可选值容器,可包含一个值或为空。 More...
class  MIDI
 MIDI 输出设备控制器,支持乐器切换、音量调节、同步/异步播放音符序列。 More...
class  MultiArray
 编译期固定维度的多维数组(堆版本)。 More...
class  MultiArray< T, D >
 一维特化。 More...
class  MultiArray< T, First, Rest... >
 多维特化(维度 >= 2)。 More...
class  MultiArrayError
 表示 MultiArray 多维数组操作中的错误,如维度不匹配。 More...
class  MultiLFQueue
 多队列版本的 LFQueue,将数据分布到多个独立的 LFQueue 中以提高并发性能。 More...
struct  Note
 表示一个音符,包含音高、时值和力度。 More...
struct  nothing_t
 空状态标记对象,用于显式构造空的 Maybe。 More...
struct  PairHash
 用于 std::pair 类型的哈希函数对象。 More...
class  Params
 递归参数包包装器,将多个参数存储为值类型,并支持通过 apply 方法延迟调用。 More...
class  Params< T >
 单参数版本的 Params 特化,递归基类。 More...
class  Params< T, Rest... >
class  Params<>
class  PriorityQueue
 优先队列容器适配器,扩展自 std::priority_queue。 More...
class  Process
 进程控制器,支持创建、等待、控制、信息查询。 More...
struct  ProcessInfo
 进程详细信息。 More...
class  Queue
 队列容器适配器,扩展自 std::queue。 More...
class  Result
 表示可能成功或失败的结果,类似于 Rust 的 Result 类型。 More...
class  Scheduler
 基于条件变量的简单调度器,用于延迟执行或周期性的后台任务。 More...
class  Screen
 用于表示虚拟屏幕的类。 More...
class  SharedTask
 异步任务类,用于在后台线程中执行任务 (共享版)。 More...
class  Stack
 栈容器适配器,扩展自 std::stack。 More...
class  StopIteration
 表示试图对已结束的生成器调用 next()。 More...
class  Table
 双重分派函数表,用于根据两个对象的运行时类型调用注册的函数。 More...
class  Task
 异步任务类,用于在后台线程中执行任务。 More...
class  Thread
 线程类,封装了 std::thread 和 Event 类。 More...
class  ThreadPool
 线程池执行器类,用于管理和执行并发任务。 More...
class  TiedIterators
 绑定迭代器对,一齐迭代。 More...
class  Time
 表示以纳秒为单位的时间量,支持单位转换、算术运算和自动选择合适的输出单位。 More...
class  TypeError
 表示类型错误,例如访问 Maybe 中不存在的值或 Box 中类型不匹配。 More...
struct  uniform_distribution_impl
 取得适配分布的主模板。 More...
class  Union
 类型安全的可判别联合体。 More...
class  ValueError
 表示值错误,例如传入的参数值不在预期范围内。 More...
class  View
 容器的非拥有视图(可变版本)。 More...
class  View< const Container >
 容器的非拥有视图(常量版本)。 More...
class  View< const T[]>
 const T[] 的特化,包装指向 const 的原生数组指针。 More...
class  View< T[]>
 T[] 的特化,包装原生数组指针。 More...
class  WColorGuard
 RAII颜色守卫,构造时设置颜色,析构时自动恢复。 More...

Typedefs

template<typename... Args>
using void_t = void
 C++11 兼容的 void_t 实现。
template<class F, class... Args>
using is_callable = is_callable_impl<F(Args...), void>
template<class T>
using is_w_printable = is_basic_printable<wchar_t, std::char_traits<wchar_t>, T>
 is_basic_printable<wchar_t, ...> 的简写。
template<class F, class... Args>
using enable_if_callable
 启用若 F 可以 Args... 参数调用。
template<class F, class... Args>
using enable_if_not_callable
 启用若 F 不可以 Args... 参数调用。
template<class T>
using enable_if_iterator
 启用若 T 是迭代器。
template<class T>
using enable_if_not_iterator
 启用若 T 不是迭代器。
template<class T>
using enable_if_string
 启用若 T(decay 后)是字符串类型。
template<class T>
using enable_if_not_string
 启用若 T(decay 后)不是字符串类型。
template<class T>
using enable_if_printable
 启用若 T 可打印。
template<class T>
using enable_if_not_printable
 启用若 T 不可打印。
template<class T>
using enable_if_char
 启用若 T(decay 后)是字符类型。
template<class T>
using enable_if_not_char
 启用若 T(decay 后)不是字符类型。
template<typename T>
using uniform_distribution_t = typename uniform_distribution_impl<T>::type
 取得对印类型所对应的均匀分布。
template<class T>
using enable_if_generator
 启用若 T 是生成器。
template<class T>
using enable_if_not_generator
 启用若 T 不是生成器。
template<class CharT, class Traits, class T>
using enable_if_basic_printable
 启用若 T(decay 后)对给定字符流可打印。
template<class T>
using enable_if_w_printable
 启用若 T(decay 后)对 wchar_t 流可打印。
using Path = BasicPath<char>
 窄字符路径类型。
using WPath = BasicPath<wchar_t>
 宽字符路径类型。
using InputSettings = BasicInputSettings<char>
 BasicInputSettings<char> 的类型别名。
using WInputSettings = BasicInputSettings<wchar_t>
 BasicInputSettings<wchar_t> 的类型别名。
template<class Tuple, size_t N = std::tuple_size<Tuple>::value>
using TuplePrinter = BasicTuplePrinter<char, std::char_traits<char>, Tuple, N>
 BasicTuplePrinter<char> 的类型别名。
using Output = BasicOutput<char>
 BasicOutput<char> 的类型别名。
using WOutput = BasicOutput<wchar_t>
 BasicOutput<wchar_t> 的类型别名。
using ProgressConfig = BasicProgressConfig<char>
 BasicProgressConfig<char> 的类型别名。
using WProgressConfig = BasicProgressConfig<wchar_t>
 BasicProgressConfig<wchar_t> 的类型别名。
template<class Iter>
using Progress = BasicProgress<char, std::char_traits<char>, Iter>
 BasicProgress<char, std::char_traits<char>, Iter> 的类型别名。
template<class Iter>
using WProgress = BasicProgress<wchar_t, std::char_traits<wchar_t>, Iter>
 BasicProgress<wchar_t, std::char_traits<wchar_t>, Iter> 的类型别名。
using Rational = BasicRational<intmax_t>
 以 intmax_t 为基的分数。
using Rational_8 = BasicRational<int8_t>
 以 int8_t 为基的分数。
using Rational_16 = BasicRational<int16_t>
 以 int16_t 为基的分数。
using Rational_32 = BasicRational<int32_t>
 以 int32_t 为基的分数。
using Rational_64 = BasicRational<int64_t>
 以 int64_t 为基的分数。
using INIConfig = BasicINIConfig<char>
 BasicINIConfig<char> 的类型别名。
using WINIConfig = BasicINIConfig<wchar_t>
 BasicINIConfig<wchar_t> 的类型别名。
using FormatSpec = details::BasicFormatSpec<char>
using WFormatSpec = details::BasicFormatSpec<wchar_t>
using Regex = BasicRegex<char>
 字符正则表达式。
using WRegex = BasicRegex<wchar_t>
 宽字符正则表达式。
using PartitionResult = BasicPartitionResult<char>
 BasicPartitionResult<char> 的类型别名。
using WPartitionResult = BasicPartitionResult<wchar_t>
 BasicPartitionResult<wchar_t> 的类型别名。
using Logging = BasicLogging<char>
 BasicLogging<char> 的类型别名。
using WLogging = BasicLogging<wchar_t>
 BasicLogging<wchar_t> 的类型别名。

Enumerations

enum class  Key : int {
  None = 0 , Unknown = 1 , A = 'A' , B ,
  C , D , E , F ,
  G , H , I , J ,
  K , L , M , N ,
  O , P , Q , R ,
  S , T , U , V ,
  W , X , Y , Z ,
  Num0 = '0' , Num1 , Num2 , Num3 ,
  Num4 , Num5 , Num6 , Num7 ,
  Num8 , Num9 , Space = ' ' , Enter = 13 ,
  Esc = 27 , Backspace = 127 , Tab = 9 , Up = 1000 ,
  Down , Left , Right , F1 ,
  F2 , F3 , F4 , F5 ,
  F6 , F7 , F8 , F9 ,
  F10 , F11 , F12
}
 用于表示常用按键的枚举。 More...
enum class  QuantileMethod {
  QuantileMethod::Nearest , QuantileMethod::Linear , QuantileMethod::Midpoint , QuantileMethod::Lower ,
  QuantileMethod::Upper , QuantileMethod::ExcelInc , QuantileMethod::ExcelExc
}
enum class  Signal : int {
  Interrupt = SIGINT , Terminate = SIGTERM , Kill = SIGKILL , Stop = SIGSTOP ,
  Continue = SIGCONT , Hangup = SIGHUP , User1 = SIGUSR1 , User2 = SIGUSR2
}
 常用信号枚举。 More...
enum class  Instrument : unsigned char {
  AcousticGrandPiano = 0 , BrightAcousticPiano = 1 , ElectricGrandPiano = 2 , HonkyTonkPiano = 3 ,
  ElectricPiano1 = 4 , ElectricPiano2 = 5 , Harpsichord = 6 , Clavinet = 7 ,
  Celesta = 8 , Glockenspiel = 9 , MusicBox = 10 , Vibraphone = 11 ,
  Marimba = 12 , Xylophone = 13 , TubularBells = 14 , Dulcimer = 15 ,
  DrawbarOrgan = 16 , PercussiveOrgan = 17 , RockOrgan = 18 , ChurchOrgan = 19 ,
  ReedOrgan = 20 , Accordion = 21 , Harmonica = 22 , TangoAccordion = 23 ,
  AcousticGuitarNylon = 24 , AcousticGuitarSteel = 25 , ElectricGuitarJazz = 26 , ElectricGuitarClean = 27 ,
  ElectricGuitarMuted = 28 , OverdrivenGuitar = 29 , DistortionGuitar = 30 , GuitarHarmonics = 31 ,
  AcousticBass = 32 , ElectricBassFinger = 33 , ElectricBassPick = 34 , FretlessBass = 35 ,
  SlapBass1 = 36 , SlapBass2 = 37 , SynthBass1 = 38 , SynthBass2 = 39 ,
  Violin = 40 , Viola = 41 , Cello = 42 , Contrabass = 43 ,
  TremoloStrings = 44 , PizzicatoStrings = 45 , OrchestralHarp = 46 , Timpani = 47 ,
  StringEnsemble1 = 48 , StringEnsemble2 = 49 , SynthStrings1 = 50 , SynthStrings2 = 51 ,
  ChoirAahs = 52 , VoiceOohs = 53 , SynthVoice = 54 , OrchestraHit = 55 ,
  Trumpet = 56 , Trombone = 57 , Tuba = 58 , MutedTrumpet = 59 ,
  FrenchHorn = 60 , BrassSection = 61 , SynthBrass1 = 62 , SynthBrass2 = 63 ,
  SopranoSax = 64 , AltoSax = 65 , TenorSax = 66 , BaritoneSax = 67 ,
  Oboe = 68 , EnglishHorn = 69 , Bassoon = 70 , Clarinet = 71 ,
  Piccolo = 72 , Flute = 73 , Recorder = 74 , PanFlute = 75 ,
  BlownBottle = 76 , Shakuhachi = 77 , Whistle = 78 , Ocarina = 79 ,
  Lead1Square = 80 , Lead2Sawtooth = 81 , Lead3Calliope = 82 , Lead4Chiff = 83 ,
  Lead5Charang = 84 , Lead6Voice = 85 , Lead7Fifths = 86 , Lead8BassLead = 87 ,
  Pad1NewAge = 88 , Pad2Warm = 89 , Pad3Polysynth = 90 , Pad4Choir = 91 ,
  Pad5Bowed = 92 , Pad6Metallic = 93 , Pad7Halo = 94 , Pad8Sweep = 95 ,
  Fx1Rain = 96 , Fx2Soundtrack = 97 , Fx3Crystal = 98 , Fx4Atmosphere = 99 ,
  Fx5Brightness = 100 , Fx6Goblins = 101 , Fx7Echoes = 102 , Fx8SciFi = 103 ,
  Sitar = 104 , Banjo = 105 , Shamisen = 106 , Koto = 107 ,
  Kalimba = 108 , Bagpipe = 109 , Fiddle = 110 , Shanai = 111 ,
  TinkleBell = 112 , Agogo = 113 , SteelDrums = 114 , Woodblock = 115 ,
  TaikoDrum = 116 , MelodicTom = 117 , SynthDrum = 118 , ReverseCymbal = 119 ,
  GuitarFretNoise = 120 , BreathNoise = 121 , Seashore = 122 , BirdTweet = 123 ,
  TelephoneRing = 124 , Helicopter = 125 , Applause = 126 , Gunshot = 127
}
 128 种 GM 标准乐器编号(0-127)。 More...

Functions

template<class T, size_t N, class F>
F for_each (Channel< T, N > &channel, F &&func)
 遍历通道中的所有元素。
template<class F, class... Args>
auto async (F &&f, Args &&...args) -> std::future< decltype(std::forward< F >(f)(std::forward< Args >(args)...))>
 提交一个可调用对象到全局线程池执行。
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()+std::declval< U >()), Dims... > operator+ (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() - std::declval< U >()), Dims... > operator- (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() *std::declval< U >()), Dims... > operator* (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()/std::declval< U >()), Dims... > operator/ (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() % std::declval< U >()), Dims... > operator% (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator+= (MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator-= (MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator*= (MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator/= (MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator%= (MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator+= (MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator-= (MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator*= (MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator/= (MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator%= (MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator== (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator!= (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator< (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator> (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator<= (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator>= (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()+std::declval< U >()), Dims... > operator+ (const MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() - std::declval< U >()), Dims... > operator- (const MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() *std::declval< U >()), Dims... > operator* (const MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()/std::declval< U >()), Dims... > operator/ (const MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() % std::declval< U >()), Dims... > operator% (const MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()+std::declval< U >()), Dims... > operator+ (const U &a, const MultiArray< T, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() - std::declval< U >()), Dims... > operator- (const U &a, const MultiArray< T, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() *std::declval< U >()), Dims... > operator* (const U &a, const MultiArray< T, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()/std::declval< U >()), Dims... > operator/ (const U &a, const MultiArray< T, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() % std::declval< U >()), Dims... > operator% (const U &a, const MultiArray< T, Dims... > &b)
template<class T, size_t... Dims>
MultiArray< decltype(+std::declval< T >()), Dims... > operator+ (const MultiArray< T, Dims... > &a)
template<class T, size_t... Dims>
MultiArray< decltype(- std::declval< T >()), Dims... > operator- (const MultiArray< T, Dims... > &a)
template<class T, size_t... Dims>
MultiArray< decltype(~ std::declval< T >()), Dims... > operator~ (const MultiArray< T, Dims... > &a)
template<class T, size_t... Dims>
MultiArray< bool, Dims... > operator! (const MultiArray< T, Dims... > &a)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator== (const MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator!= (const MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator< (const MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator> (const MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator<= (const MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator>= (const MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator== (const U &a, const MultiArray< T, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator!= (const U &a, const MultiArray< T, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator< (const U &a, const MultiArray< T, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator> (const U &a, const MultiArray< T, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator<= (const U &a, const MultiArray< T, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator>= (const U &a, const MultiArray< T, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator&& (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator|| (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator&& (const MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator|| (const MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator&& (const U &a, const MultiArray< T, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > operator|| (const U &a, const MultiArray< T, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() &std::declval< U >()), Dims... > operator& (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()|std::declval< U >()), Dims... > operator| (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() ^ std::declval< U >()), Dims... > operator^ (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()<< std::declval< U >()), Dims... > operator<< (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() > > std::declval< U >()), Dims... > operator>> (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator&= (MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator|= (MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator^= (MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator<<= (MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator>>= (MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() &std::declval< U >()), Dims... > operator& (const MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()|std::declval< U >()), Dims... > operator| (const MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() ^ std::declval< U >()), Dims... > operator^ (const MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()<< std::declval< U >()), Dims... > operator<< (const MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() > > std::declval< U >()), Dims... > operator>> (const MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() &std::declval< U >()), Dims... > operator& (const U &a, const MultiArray< T, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()|std::declval< U >()), Dims... > operator| (const U &a, const MultiArray< T, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() ^ std::declval< U >()), Dims... > operator^ (const U &a, const MultiArray< T, Dims... > &b)
template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() > > std::declval< U >()), Dims... > operator>> (const U &a, const MultiArray< T, Dims... > &b)
template<class T, class U, size_t... Dims>
std::enable_if<!std::is_base_of< std::ios_base, U >::value, MultiArray< decltype(std::declval< U >()<< std::declval< T >()), Dims... > >::type operator<< (const U &value, const MultiArray< T, Dims... > &a)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator&= (MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator|= (MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator^= (MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator<<= (MultiArray< T, Dims... > &a, const U &b)
template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & operator>>= (MultiArray< T, Dims... > &a, const U &b)
template<class T, size_t... Dims>
T sum (const MultiArray< T, Dims... > &a)
 求和所有元素。
template<class T, size_t... Dims>
T min (const MultiArray< T, Dims... > &a)
 求最小值。
template<class T, size_t... Dims>
T max (const MultiArray< T, Dims... > &a)
 求最大值。
template<class T, size_t... Dims>
bool all (const MultiArray< T, Dims... > &a)
 检查所有元素是否都为 true(逻辑与归约)。
template<class T, size_t... Dims>
bool any (const MultiArray< T, Dims... > &a)
 检查是否存在至少一个 true 元素(逻辑或归约)。
template<class T, class U, size_t... Dims>
bool equals (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
 检查两个 MultiArray 是否相等。
template<class T, class U, size_t... Dims1, size_t... Dims2>
constexpr bool equals (const MultiArray< T, Dims1... > &, const MultiArray< U, Dims2... > &)
 检查两个 MultiArray 是否相等。
template<class T, class U, size_t... Dims, class Op>
bool equals (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b, Op &&op)
 检查两个 MultiArray 是否相等。
template<class T, class U, size_t... Dims1, size_t... Dims2, class Op>
constexpr bool equals (const MultiArray< T, Dims1... > &, const MultiArray< U, Dims2... > &, Op &&)
 检查两个 MultiArray 是否相等。
template<class T, class U, size_t... Dims>
int compare (const MultiArray< T, Dims... > &a, const MultiArray< U, Dims... > &b)
 比较两个 MultiArray 的大小。
template<class CharT, class Traits>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &os, const View< std::string > &sv)
 输出 std::string 视图的内容。
template<class CharT, class Traits, class Container>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &os, const View< Container > &v)
 输出任意视图的内容。
template<class Container>
View< Container > make_view (Container &cont)
 创建整个容器的视图(可变版本)。
template<class Container>
View< const Container > make_view (const Container &cont)
 创建整个容器的视图(常量版本)。
template<class Container>
View< Container > make_view (Container &cont, size_t start, size_t end)
 创建容器子区间的视图(可变版本)。
template<class Container>
View< const Container > make_view (const Container &cont, size_t start, size_t end)
 创建容器子区间的视图(常量版本)。
template<class Container>
View< Container > make_view (typename Container::iterator begin, typename Container::iterator end)
 从迭代器对创建视图(可变版本)。
template<class Container>
View< const Container > make_view (typename Container::const_iterator begin, typename Container::const_iterator end)
 从迭代器对创建视图(常量版本)。
template<class T>
View< T[]> make_view (T *begin, T *end)
 从指针对创建视图(可变版本)。
template<class T>
View< const T[]> make_view (const T *begin, const T *end)
 从指针对创建视图(常量版本)。
template<class T>
View< T[]> make_view (T *data, size_t count)
 从指针和长度创建视图(可变版本)。
template<class T>
View< const T[]> make_view (const T *data, size_t count)
 从指针和长度创建视图(常量版本)。
std::string license ()
 返回 MIT 许可证全文。
std::string platform ()
 返回当前操作系统平台名称。
std::string compiler ()
 返回当前使用的编译器名称和版本。
std::string version ()
 返回库的版本字符串。
std::string author ()
 返回库的作者。
void cc (const char *clr=color::Reset, std::ostream &os=std::cout)
 修改颜色。
void cc (const char *clr=color::Reset, std::wostream &os=std::wcout)
 修改颜色。
template<class T = std::string, class CharT = char>
T input (const CharT *prompt="", const BasicInputSettings< CharT > &is=input_settings)
 从标准输入读取一个值,支持类型模板。
template<class T = std::string>
T w_input (const wchar_t *prompt=L"", const WInputSettings &is=w_input_settings)
 读取一行宽字符字符串。
long double input_number (const char *prompt="Type a number: ", const InputSettings &is=input_settings)
 读取一个 long double 类型的数字。
template<class CharT = char>
std::basic_string< CharT > input_line (const CharT *prompt="", const BasicInputSettings< CharT > &is=input_settings)
 读取一整行字符串(包含空格)。
template<class T, class CharT = char>
T input_with_range (T min, T max, const CharT *prompt="", const BasicInputSettings< CharT > &is=input_settings)
 读取一个在指定范围内的数字。
template<class CharT = char>
CharT input_char (const CharT *prompt="", const BasicInputSettings< CharT > &is=input_settings)
 读取一个字符。
bool input_yes_or_no (const char *prompt="Type yes or no: ", const InputSettings &is=input_settings)
 读取一个 y/n 确认,返回布尔值。
template<class CharT = char>
std::basic_string< CharT > input_all (const CharT *prompt="", const BasicInputSettings< CharT > &is=input_settings)
 读取输入流中剩余的全部内容(直到 EOF)。
std::ostream & operator<< (std::ostream &os, Key k)
 让 Key 可以被打印。
template<class CharT, class Traits, class T>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &, const std::vector< T > &)
 std::vector 输出声明。
template<class CharT, class Traits, class T>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &, const std::deque< T > &)
 std::deque 输出声明。
template<class CharT, class Traits, class T>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &, const std::list< T > &)
 std::list 输出声明。
template<class CharT, class Traits, class T>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &, const std::forward_list< T > &)
 std::forward_list 输出声明。
template<class CharT, class Traits, class T, size_t n>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &, const std::array< T, n > &)
 std::array 输出声明。
template<class CharT, class Traits, class T>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &, const std::set< T > &)
 std::set 输出声明。
template<class CharT, class Traits, class K, class V>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &, const std::map< K, V > &)
 std::map 输出声明。
template<class CharT, class Traits, class T>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &, const std::multiset< T > &)
 std::multiset 输出声明。
template<class CharT, class Traits, class K, class V>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &, const std::multimap< K, V > &)
 std::multimap 输出声明。
template<class CharT, class Traits, class T>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &, const std::unordered_set< T > &)
 std::unordered_set 输出声明。
template<class CharT, class Traits, class K, class V>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &, const std::unordered_map< K, V > &)
 std::unordered_map 输出声明。
template<class CharT, class Traits, class T>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &, const std::unordered_multiset< T > &)
 std::unordered_multiset 输出声明。
template<class CharT, class Traits, class K, class V>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &, const std::unordered_multimap< K, V > &)
 std::unordered_multimap 输出声明。
template<class CharT, class Traits, class T, class U>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &, const std::pair< T, U > &)
 std::pair 输出声明。
template<class CharT, class Traits, class... Args>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &, const std::tuple< Args... > &)
 std::tuple 输出声明。
template<class CharT, class Traits, class T>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &, const std::valarray< T > &)
 std::valarray 输出声明。
template<class CharT, class Traits, class StrOrCharType>
std::enable_if< is_string< typenamestd::decay< StrOrCharType >::type >::value||is_char< typenamestd::decay< StrOrCharType >::type >::value >::type put (std::basic_ostream< CharT, Traits > &os, StrOrCharType &&value)
template<class CharT, class Traits, class OtherType>
std::enable_if<!is_string< typenamestd::decay< OtherType >::type >::value &&!is_char< typenamestd::decay< OtherType >::type >::value >::type put (std::basic_ostream< CharT, Traits > &os, OtherType &&value)
 否则,调用 repr 格式化。
template<class CharT, class Traits, class Cont>
std::basic_ostream< CharT, Traits > & cont_print_sequence (std::basic_ostream< CharT, Traits > &os, const Cont &cont)
 输出序列容器(如 vector, list)的内容,格式为 [a, b, c]。
template<class CharT, class Traits, class Cont>
std::basic_ostream< CharT, Traits > & cont_print_set (std::basic_ostream< CharT, Traits > &os, const Cont &cont)
 输出集合容器(如 set, unordered_set)的内容,格式为 {a, b, c}。
template<class CharT, class Traits, class Cont>
std::basic_ostream< CharT, Traits > & cont_print_map (std::basic_ostream< CharT, Traits > &os, const Cont &cont)
 输出映射容器(如 map, unordered_map)的内容,格式为 {key: value, ...}。
template<class T, size_t N>
std::array< T, N > to_array (const T(&ar)[N])
 将 C 风格数组转换为 std::array。
template<class T, size_t N>
std::vector< T > to_vector (const T(&ar)[N])
 将 C 风格数组转换为 std::vector。
BasicOutput & get_print ()
 内部单例(char)。
BasicOutput< wchar_t > & get_wprint ()
 内部单例(wchar_t)。
template<class CharT = char, class Traits = std::char_traits<CharT>, class Cont>
auto progress (Cont &&cont, const BasicProgressConfig< CharT, Traits > &pc) -> BasicProgress< CharT, Traits, decltype(std::begin(cont))>
 创建进度条对象的辅助函数。
void gotoxy (int x, int y) noexcept
 将光标移动到指定位置。
void clear () noexcept
 清空整个屏幕并将光标复位到 (1,1)。
void save_cursor () noexcept
 保存当前光标位置。
void restore_cursor () noexcept
 恢复之前保存的光标位置。
void hide_cursor () noexcept
 隐藏光标(提高视觉效果)。
void show_cursor () noexcept
 显示光标(恢复默认)。
std::pair< int, int > get_terminal_size () noexcept
 获取终端尺寸(行数和列数)。
void reset () noexcept
 重置终端所有属性(颜色、样式、光标等)到默认状态。
void clear_line () noexcept
 清空当前光标所在行。
void clear_to_eol () noexcept
 清空从光标位置到行尾。
void movel (int n=1) noexcept
 向左相对移动。
void mover (int n=1) noexcept
 向右相对移动。
void moveu (int n=1) noexcept
 向上相对移动。
void moved (int n=1) noexcept
 向下相对移动。
void save_screen () noexcept
 保存屏幕内容。
void restore_screen () noexcept
 恢复屏幕内容。
void clear_screen_save () noexcept
 清空屏幕并保留历史。
template<class T, size_t... Dims>
double mean (const MultiArray< T, Dims... > &arr)
 计算 MultiArray 中所有元素的算术平均值。
template<class T, size_t... Dims>
double variance (const MultiArray< T, Dims... > &arr, bool sample=true)
 计算方差。
template<class T, size_t... Dims>
double stddev (const MultiArray< T, Dims... > &arr, bool sample=true)
 计算标准差。
template<class T, size_t N>
T dot (const MultiArray< T, N > &a, const MultiArray< T, N > &b)
 计算两个一维向量的点积。
template<class T, size_t N>
double norm (const MultiArray< T, N > &a)
 计算向量的欧几里得范数(L2 范数)。
template<class T, size_t N>
double cosine (const MultiArray< T, N > &a, const MultiArray< T, N > &b)
 计算两个向量的余弦相似度。
template<class T, size_t N>
MultiArray< T, N > normalize (const MultiArray< T, N > &a)
 将向量归一化为单位向量。
template<class T, size_t N>
double euclidean (const MultiArray< T, N > &a, const MultiArray< T, N > &b)
 计算两个向量的欧几里得距离。
template<class T, size_t N>
double manhattan (const MultiArray< T, N > &a, const MultiArray< T, N > &b)
 计算两个向量的曼哈顿距离(L1 距离)。
template<class T, size_t M, size_t N, size_t K>
MultiArray< T, M, K > matmul_blocked (const MultiArray< T, M, N > &A, const MultiArray< T, N, K > &B)
 矩阵乘法(二维),使用分块算法。
template<class T, size_t M, size_t N, size_t K>
MultiArray< T, M, K > matmul_simple (const MultiArray< T, M, N > &A, const MultiArray< T, N, K > &B)
 矩阵乘法(二维),使用简单算法。
template<class T, size_t M, size_t N, size_t K>
MultiArray< T, M, K > matmul_impl (const MultiArray< T, M, N > &A, const MultiArray< T, N, K > &B, std::true_type)
 矩阵乘法(二维) std::true_type 特化,使用分块算法。
template<class T, size_t M, size_t N, size_t K>
MultiArray< T, M, K > matmul_impl (const MultiArray< T, M, N > &A, const MultiArray< T, N, K > &B, std::false_type)
 矩阵乘法(二维) std::false_type 特化,使用简单算法。
template<class T, size_t M, size_t N, size_t K>
MultiArray< T, M, K > matmul (const MultiArray< T, M, N > &A, const MultiArray< T, N, K > &B)
 矩阵乘法(二维),根据 BLOCK 大小选择简单算法或分块算法。
template<class T, size_t M, size_t N, size_t K>
MultiArray< T, M, K > matmul_parallel (const MultiArray< T, M, N > &A, const MultiArray< T, N, K > &B)
 并行矩阵乘法(二维),使用分块算法并行计算。
template<class T, size_t M, size_t N>
MultiArray< T, N, M > transpose (const MultiArray< T, M, N > &A)
 矩阵转置。
template<class T, size_t N>
MultiArray< T, N, N > identity ()
 生成 N×N 的单位矩阵。
template<class T, size_t N>
T trace (const MultiArray< T, N, N > &A)
 计算方阵的迹(对角线元素之和)。
template<class T>
MultiArray< T, 3 > cross (const MultiArray< T, 3 > &a, const MultiArray< T, 3 > &b)
 三维向量的叉积。
template<class T, size_t... Dims>
MultiArray< T, Dims... > clamp (const MultiArray< T, Dims... > &arr, T low, T high)
 将数组每个元素限制在 [low, high] 范围内。
template<class T, size_t... Dims>
MultiArray< T, Dims... > abs (const MultiArray< T, Dims... > &arr)
 计算数组中每个元素的绝对值。
template<class T, size_t... Dims>
void randomize (MultiArray< T, Dims... > &arr, T min=0, T max=100)
 用均匀分布随机数填充数组。
template<class T, size_t... Dims>
void randomize_normal (MultiArray< T, Dims... > &arr, T mean=0, T stddev=1)
 用正态分布随机数填充数组。
template<class T, size_t... Dims>
void linspace (MultiArray< T, Dims... > &arr, T start, T end)
 用线性等间距值填充数组。
template<class T, size_t... Dims>
T product (const MultiArray< T, Dims... > &arr)
 计算所有元素的乘积。
template<class T, size_t... Dims>
T kth_smallest (MultiArray< T, Dims... > arr, size_t k)
 查找第 k 小的元素(会修改数组顺序)。
template<class T, size_t N, size_t K>
MultiArray< T, N+K - 1 > convolve1d (const MultiArray< T, N > &signal, const MultiArray< T, K > &kernel)
 一维卷积。
template<class T, size_t... Dims>
MultiArray< T, Dims... > sin (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::sin。
template<class T, size_t... Dims>
MultiArray< T, Dims... > cos (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::cos。
template<class T, size_t... Dims>
MultiArray< T, Dims... > tan (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::tan。
template<class T, size_t... Dims>
MultiArray< T, Dims... > asin (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::asin。
template<class T, size_t... Dims>
MultiArray< T, Dims... > acos (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::acos。
template<class T, size_t... Dims>
MultiArray< T, Dims... > atan (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::atan。
template<class T, size_t... Dims>
MultiArray< T, Dims... > sinh (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::sinh。
template<class T, size_t... Dims>
MultiArray< T, Dims... > cosh (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::cosh。
template<class T, size_t... Dims>
MultiArray< T, Dims... > tanh (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::tanh。
template<class T, size_t... Dims>
MultiArray< T, Dims... > exp (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::exp。
template<class T, size_t... Dims>
MultiArray< T, Dims... > log (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::log(自然对数)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > log10 (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::log10(常用对数)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > pow (const MultiArray< T, Dims... > &arr, T exponent)
 对数组每个元素取幂(常数指数)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > pow (const MultiArray< T, Dims... > &base, const MultiArray< T, Dims... > &exp)
 对数组每个元素取幂(指数也是数组,逐元素计算)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > floor (const MultiArray< T, Dims... > &arr)
 对数组每个元素向下取整。
template<class T, size_t... Dims>
MultiArray< T, Dims... > ceil (const MultiArray< T, Dims... > &arr)
 对数组每个元素向上取整。
template<class T, size_t... Dims>
MultiArray< T, Dims... > round (const MultiArray< T, Dims... > &arr)
 对数组每个元素四舍五入。
template<class T, size_t... Dims, class CharT, class Traits = std::char_traits<CharT>>
void print_stats (std::basic_ostream< CharT, Traits > &os, const MultiArray< T, Dims... > &arr, const std::string &name="")
 打印数组的基本统计信息(和、均值、最小值、最大值、标准差)。
template<class T, size_t... Dims>
double covariance (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 计算两个数组的协方差。
template<class T, size_t... Dims>
double correlation (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 计算两个数组的相关系数。
template<class T, size_t... Dims>
double median (MultiArray< T, Dims... > arr)
 计算数组的中位数。
template<class T, size_t... Dims>
double quantile (MultiArray< T, Dims... > arr, double q, QuantileMethod method=QuantileMethod::Nearest)
 计算数组的分位数。
template<class T>
T det2x2 (const MultiArray< T, 2, 2 > &A)
 计算 2x2 矩阵的行列式。
template<class T>
T det3x3 (const MultiArray< T, 3, 3 > &A)
 计算 3x3 矩阵的行列式。
template<class T>
MultiArray< T, 2, 2 > inv2x2 (const MultiArray< T, 2, 2 > &A)
 计算 2x2 矩阵的逆矩阵。
template<class T>
MultiArray< T, 3, 3 > inv3x3 (const MultiArray< T, 3, 3 > &A)
 计算 3x3 矩阵的逆矩阵。
template<class T, size_t... Dims>
MultiArray< T, Dims... > sigmoid (const MultiArray< T, Dims... > &arr)
 计算 Sigmoid 激活函数。
template<class T, size_t... Dims>
MultiArray< T, Dims... > relu (const MultiArray< T, Dims... > &arr)
 计算 ReLU 激活函数。
template<class T, size_t... Dims>
MultiArray< T, Dims... > softmax (const MultiArray< T, Dims... > &arr)
 计算 Softmax 激活函数。
template<class T, size_t H, size_t W, size_t KH, size_t KW>
MultiArray< T, H - KH+1, W - KW+1 > convolve2d (const MultiArray< T, H, W > &image, const MultiArray< T, KH, KW > &kernel)
 执行二维卷积操作。
template<class T, size_t M, size_t N>
void print_matrix (std::ostream &os, const MultiArray< T, M, N > &A, const char *name=nullptr)
 打印矩阵。
template<class T, size_t N>
MultiArray< std::complex< T >, N > fft (const MultiArray< std::complex< T >, N > &x)
 一维 FFT(Cooley-Tukey 算法)。
template<class T, size_t N>
MultiArray< std::complex< T >, N > ifft (const MultiArray< std::complex< T >, N > &X)
 一维 IFFT(逆快速傅里叶变换)。
template<class T, size_t N>
MultiArray< std::complex< T >, N > rfft (const MultiArray< T, N > &x)
 实数 FFT(输入为实数,输出为复数频域)。
template<class T, size_t N>
MultiArray< T, N > irfft (const MultiArray< std::complex< T >, N > &X)
 实数 IFFT(输入为复数频域,输出为实数时域)。
template<class T, size_t N>
MultiArray< T, N/2+1 > spectrum (const MultiArray< T, N > &x)
 频谱(幅值谱),归一化到真实幅度。
template<class T, size_t N>
MultiArray< T, N/2+1 > power_spectrum (const MultiArray< T, N > &x)
 功率谱(幅值平方)。
template<class T, size_t N>
MultiArray< T, N/2+1 > phase_spectrum (const MultiArray< T, N > &x)
 相位谱(弧度)。
template<class T, size_t N>
MultiArray< T, N/2+1 > log_spectrum (const MultiArray< T, N > &x)
 对数频谱(分贝)。
template<class T, size_t M, size_t N>
MultiArray< T, M > matvec (const MultiArray< T, M, N > &A, const MultiArray< T, N > &x)
 矩阵-向量乘法。
template<class T, size_t M, size_t N>
MultiArray< T, M, N > outer (const MultiArray< T, M > &a, const MultiArray< T, N > &b)
 外积。
template<class T, size_t M, size_t N>
double frobenius_norm (const MultiArray< T, M, N > &A)
 矩阵范数(弗罗贝尼乌斯范数)。
template<class T, size_t M, size_t N>
T column_norm (const MultiArray< T, M, N > &A)
 列范数(最大列和范数)。
template<class T, size_t M, size_t N>
T row_norm (const MultiArray< T, M, N > &A)
 行范数(最大行和范数)。
template<class T, size_t N>
MultiArray< T, N > hann_window ()
 窗函数。
template<class T, size_t N>
MultiArray< T, N > hamming_window ()
 汉明窗。
template<class T, size_t N>
MultiArray< T, N > blackman_window ()
 布莱克曼窗。
template<class T, size_t N>
MultiArray< T, N > fftshift (const MultiArray< T, N > &x)
 FFT 移位。
template<class T, size_t N, size_t M>
MultiArray< T, N+M - 1 > cross_correlation (const MultiArray< T, N > &a, const MultiArray< T, M > &b)
 互相关。
uint64_t mod_mul (uint64_t a, uint64_t b, uint64_t mod) noexcept
 使用二进制加法模拟模乘。
uint64_t mod_pow (uint64_t a, uint64_t b, uint64_t mod) noexcept
 模幂运算。
bool miller_rabin_test (uint64_t n, uint64_t a) noexcept
 单次 Miller-Rabin 素性测试。
bool is_prime (uint64_t n) noexcept
 确定性素数判定。
std::mt19937 & thread_rng ()
 获取一个全局的、以当前时间戳为种子的 Mersenne Twister 随机数引擎。
template<class T>
void seed (T seed)
 修改 thread_rng 提供的随机数引擎的种子。
template<class T = int>
T randint (T min=0, T max=32767, std::mt19937 &gen=thread_rng())
 生成一个指定范围内的随机整数(均匀分布)。
template<class T = double>
T uniform (T min=0.0, T max=1.0, std::mt19937 &gen=thread_rng())
 生成一个指定范围内的随机浮点数(均匀分布)。
bool randbool (double p=0.5, std::mt19937 &gen=thread_rng())
 生成一个服从伯努利分布(Bernoulli Distribution)的随机布尔值。
template<class C>
auto choice (C &c, std::mt19937 &gen=thread_rng()) -> decltype(*std::begin(c))
 从容器中随机选择一个元素(左值版本,返回引用)。
template<class C>
auto choice (const C &c, std::mt19937 &gen=thread_rng()) -> decltype(*std::begin(c))
 从容器中随机选择一个元素(常量左值版本,返回 const 引用)。
template<class C>
auto choice (C &&c, std::mt19937 &gen=thread_rng()) -> decltype(*std::begin(c))
 从容器中随机选择一个元素(右值版本,返回值)。
template<class T>
T choice (std::initializer_list< T > init, std::mt19937 &gen=thread_rng())
 从 std::initializer_list 中随机选择一个元素(重载版本)。
template<class C>
void shuffle (C &&c, std::mt19937 &gen=thread_rng())
 随机打乱容器中元素的顺序(Fisher-Yates 洗牌算法)。
template<class T = double>
std::vector< T > rnorm (size_t n, T mean=0.0, T sd=1.0, std::mt19937 &gen=thread_rng())
 生成 n 个服从正态分布(Normal Distribution)的随机数。
template<class T = double>
std::vector< T > runif (size_t n, T min=0.0, T max=1.0, std::mt19937 &gen=thread_rng())
 生成 n 个服从均匀分布(Uniform Distribution)的随机数。
template<class T = int>
std::vector< T > rbinom (size_t n, T size, double prob, std::mt19937 &gen=thread_rng())
 生成 n 个服从二项分布(Binomial Distribution)的随机数。
template<class T = int>
std::vector< T > rpois (size_t n, double lambda, std::mt19937 &gen=thread_rng())
 生成 n 个服从泊松分布(Poisson Distribution)的随机数。
template<class T = double>
std::vector< T > rexp (size_t n, T rate=1.0, std::mt19937 &gen=thread_rng())
 生成 n 个服从指数分布(Exponential Distribution)的随机数。
template<class T = double>
std::vector< T > rgamma (size_t n, T shape, T rate=1.0, std::mt19937 &gen=thread_rng())
 生成 n 个服从伽马分布(Gamma Distribution)的随机数。
template<class T = double>
std::vector< T > rbeta (size_t n, T shape1, T shape2, std::mt19937 &gen=thread_rng())
 生成 n 个服从贝塔分布(Beta Distribution)的随机数。
template<class T = double>
std::vector< T > rchisq (size_t n, T df, std::mt19937 &gen=thread_rng())
 生成 n 个服从卡方分布(Chi-squared Distribution)的随机数。
template<class T = double>
std::vector< T > rt (size_t n, T df, std::mt19937 &gen=thread_rng())
 生成 n 个服从 t 分布(Student's t-distribution)的随机数。
template<class T = double>
std::vector< T > rf (size_t n, T df1, T df2, std::mt19937 &gen=thread_rng())
 生成 n 个服从 F 分布(Fisher–Snedecor F-distribution)的随机数。
template<class T = double>
std::vector< T > rlnorm (size_t n, T meanlog=0.0, T sdlog=1.0, std::mt19937 &gen=thread_rng())
 生成 n 个服从对数正态分布(Lognormal Distribution)的随机数。
template<class T = double>
std::vector< T > rweibull (size_t n, T shape, T scale=1.0, std::mt19937 &gen=thread_rng())
 生成 n 个服从韦布尔分布(Weibull Distribution)的随机数。
template<class C>
std::vector< typename C::value_type > sample (const C &c, size_t size, bool replace=false, std::mt19937 &gen=thread_rng())
 从容器中随机抽取指定数量的元素(有放回或无放回)。
template<class T>
std::vector< T > sample (std::initializer_list< T > init, size_t size, bool replace=false, std::mt19937 &gen=thread_rng())
 从 std::initializer_list 中随机抽样(重载版本)。
template<typename... Args>
std::string format (const std::string &fmt, const Args &...args)
 格式化字符串(char 版)。
template<typename... Args>
std::wstring format (const std::wstring &fmt, const Args &...args)
 格式化字符串(wchar_t 版)。
std::string tiname_impl (const std::type_info &ti)
 获取类型信息的可读名称(跨平台 demangle),返回 std::string。
std::string tiname (const std::type_info &ti)
 tiname_impl 的 char 版别名。
std::wstring wtiname (const std::type_info &ti)
 tiname_impl 的 wchar_t 版。
template<class T, class CharT = char, class Traits = std::char_traits<CharT>>
std::enable_if< is_string< typenamestd::decay< T >::type >::value >::type repr (T &&value, std::basic_ostream< CharT, Traits > &os=std::cout)
 输出字符串类型(std::string, const char* 等)的表示,带双引号。
template<class T, class CharT = char, class Traits = std::char_traits<CharT>>
std::enable_if< is_char< typenamestd::decay< T >::type >::value >::type repr (T &&value, std::basic_ostream< CharT, Traits > &os=std::cout)
 输出字符类型的表示,带单引号。
template<class T, class CharT = char, class Traits = std::char_traits<CharT>>
std::enable_if< std::is_same< typenamestd::decay< T >::type, bool >::value >::type repr (T &&value, std::basic_ostream< CharT, Traits > &os=std::cout)
 输出布尔值的表示("true" 或 "false")。
template<class T, class CharT = char, class Traits = std::char_traits<CharT>>
std::enable_if< std::is_same< typenamestd::decay< T >::type, std::nullptr_t >::value >::type repr (T &&, std::basic_ostream< CharT, Traits > &os=std::cout)
 输出 nullptr 的表示。
template<class CharT, class Traits, class Ret, class... Args>
void repr (Ret(*f)(Args...), std::basic_ostream< CharT, Traits > &os=std::cout)
 输出函数指针的表示,格式为 "<function at 地址>"。
template<class T, class CharT = char, class Traits = std::char_traits<CharT>>
std::enable_if<!std::is_same< typenamestd::decay< T >::type, bool >::value &&!std::is_same< typenamestd::decay< T >::type, std::nullptr_t >::value &&!is_string< typenamestd::decay< T >::type >::value &&!is_char< typenamestd::decay< T >::type >::value &&!std::is_function< typenamestd::remove_pointer< T >::type >::value &&is_basic_printable< CharT, Traits, typenamestd::decay< T >::type >::value >::type repr (T &&value, std::basic_ostream< CharT, Traits > &os=std::cout)
 输出可打印类型(定义了 operator<<)的表示,直接输出值。
template<class T, class CharT = char, class Traits = std::char_traits<CharT>>
std::enable_if<!std::is_same< typenamestd::decay< T >::type, std::nullptr_t >::value &&!is_string< typenamestd::decay< T >::type >::value &&!is_char< typenamestd::decay< T >::type >::value &&!is_basic_printable< CharT, Traits, typenamestd::decay< T >::type >::value >::type repr (T &&value, std::basic_ostream< CharT, Traits > &os=std::cout)
 输出不可打印类型的表示,格式为 "<'类型名' object at 地址>"。
template<class T, class CharT = char, class Traits = std::char_traits<CharT>>
void repr (std::reference_wrapper< T > v, std::basic_ostream< CharT, Traits > &os=std::cout)
template<class CharT, class Traits, class Allocator>
std::basic_string< CharT, Traits, Allocator > ltrim (std::basic_string< CharT, Traits, Allocator > str)
 移除字符串左侧的空白字符(空格、制表符等)。
template<class CharT, class Traits, class Allocator>
std::basic_string< CharT, Traits, Allocator > rtrim (std::basic_string< CharT, Traits, Allocator > str)
 移除字符串右侧的空白字符。
template<class CharT, class Traits, class Allocator>
std::basic_string< CharT, Traits, Allocator > trim (std::basic_string< CharT, Traits, Allocator > str)
 移除字符串两侧的空白字符。
template<class CharT, class Traits, class Allocator>
std::basic_string< CharT, Traits, Allocator > ltrim (std::basic_string< CharT, Traits, Allocator > str, const std::basic_string< CharT, Traits, Allocator > &chars)
 移除字符串左侧指定的字符集合。
template<class CharT, class Traits, class Allocator>
std::basic_string< CharT, Traits, Allocator > rtrim (std::basic_string< CharT, Traits, Allocator > str, const std::basic_string< CharT, Traits, Allocator > &chars)
 移除字符串右侧指定的字符集合。
template<class CharT, class Traits, class Allocator>
std::basic_string< CharT, Traits, Allocator > trim (std::basic_string< CharT, Traits, Allocator > str, const std::basic_string< CharT, Traits, Allocator > &chars)
 移除字符串两侧指定的字符集合。
template<class CharT, class Traits, class Allocator>
std::basic_string< CharT, Traits, Allocator > upper (std::basic_string< CharT, Traits, Allocator > str, const std::locale &loc=std::locale{})
 将字符串转换为大写。
template<class CharT, class Traits, class Allocator>
std::basic_string< CharT, Traits, Allocator > lower (std::basic_string< CharT, Traits, Allocator > str, const std::locale &loc=std::locale{})
 将字符串转换为小写。
template<class CharT, class Traits, class Allocator>
std::basic_string< CharT, Traits, Allocator > title (std::basic_string< CharT, Traits, Allocator > str, const std::locale &loc=std::locale{})
 将字符串转换为标题格式(每个单词首字母大写,其余小写)。
template<class CharT, class Traits, class Allocator>
BasicPartitionResult< CharT, Traits, Allocator > partition (const std::basic_string< CharT, Traits, Allocator > &text, const std::basic_string< CharT, Traits, Allocator > &sep)
 在字符串中查找第一个分隔符,并返回分隔符之前、分隔符本身、分隔符之后的三部分。
template<class CharT, class Traits, class Allocator>
std::vector< std::basic_string< CharT, Traits, Allocator > > split (const std::basic_string< CharT, Traits, Allocator > &text, const std::basic_string< CharT, Traits, Allocator > &sep=std::basic_string< CharT, Traits, Allocator >(1, CharT{' '}))
 以分隔符分割字符串(类似 Python 的 split,默认按空格分割)。
template<class T, class CharT = char, class Traits = std::char_traits<CharT>, class Allocator = std::allocator<CharT>>
std::basic_string< CharT, Traits, Allocator > join (const std::vector< T > &vec, const std::basic_string< CharT, Traits, Allocator > &sep=std::basic_string< CharT, Traits, Allocator >{})
 以分隔符连接容器中的字符串元素。
std::string ltrim (const char *str)
std::wstring ltrim (const wchar_t *str)
std::string rtrim (const char *str)
std::wstring rtrim (const wchar_t *str)
std::string trim (const char *str)
std::wstring trim (const wchar_t *str)
std::string ltrim (const char *str, const std::string &chars)
std::wstring ltrim (const wchar_t *str, const std::wstring &chars)
std::string rtrim (const char *str, const std::string &chars)
std::wstring rtrim (const wchar_t *str, const std::wstring &chars)
std::string trim (const char *str, const std::string &chars)
std::wstring trim (const wchar_t *str, const std::wstring &chars)
std::string ltrim (const char *str, const char *chars)
std::wstring ltrim (const wchar_t *str, const wchar_t *chars)
std::string rtrim (const char *str, const char *chars)
std::wstring rtrim (const wchar_t *str, const wchar_t *chars)
std::string trim (const char *str, const char *chars)
std::wstring trim (const wchar_t *str, const wchar_t *chars)
std::string ltrim (const std::string &str, const char *chars)
std::wstring ltrim (const std::wstring &str, const wchar_t *chars)
std::string rtrim (const std::string &str, const char *chars)
std::wstring rtrim (const std::wstring &str, const wchar_t *chars)
std::string trim (const std::string &str, const char *chars)
std::wstring trim (const std::wstring &str, const wchar_t *chars)
std::string upper (const char *str, const std::locale &loc=std::locale{})
 将字符串转换为大写。
std::wstring upper (const wchar_t *str, const std::locale &loc=std::locale{})
 将字符串转换为大写。
std::string lower (const char *str, const std::locale &loc=std::locale{})
 将字符串转换为小写。
std::wstring lower (const wchar_t *str, const std::locale &loc=std::locale{})
 将字符串转换为小写。
std::string title (const char *str, const std::locale &loc=std::locale{})
 将字符串转换为标题格式(每个单词首字母大写,其余小写)。
std::wstring title (const wchar_t *str, const std::locale &loc=std::locale{})
 将字符串转换为标题格式(每个单词首字母大写,其余小写)。
template<class CharT, class Traits, class Allocator>
BasicPartitionResult< CharT, Traits, Allocator > partition (const std::basic_string< CharT, Traits, Allocator > &text, const CharT *sep)
 在字符串中查找第一个分隔符,并返回分隔符之前、分隔符本身、分隔符之后的三部分。
template<class CharT, class Traits, class Allocator>
std::vector< std::basic_string< CharT, Traits, Allocator > > split (const std::basic_string< CharT, Traits, Allocator > &text, const CharT *sep)
 以分隔符分割字符串(类似 Python 的 split,默认按空格分割)。
BasicPartitionResult partition (const char *text, const std::string &sep)
 在字符串中查找第一个分隔符,并返回分隔符之前、分隔符本身、分隔符之后的三部分。
BasicPartitionResult< wchar_t > partition (const wchar_t *text, const std::wstring &sep)
 在字符串中查找第一个分隔符,并返回分隔符之前、分隔符本身、分隔符之后的三部分。
std::vector< std::string > split (const char *text, const std::string &sep=" ")
 以分隔符分割字符串(类似 Python 的 split,默认按空格分割)。
std::vector< std::wstring > split (const wchar_t *text, const std::wstring &sep=L" ")
 以分隔符分割字符串(类似 Python 的 split,默认按空格分割)。
std::string join (const std::vector< std::string > &items, const std::string &sep="")
 以分隔符连接容器中的字符串元素。
std::wstring join (const std::vector< std::wstring > &items, const std::wstring &sep=L"")
 以分隔符连接容器中的字符串元素。
template<class CharT, class Traits>
void to_stream (char ch, std::basic_ostream< CharT, Traits > &os)
 将 ch 输出到流。
template<class CharT, class Traits>
void to_stream (wchar_t wch, std::basic_ostream< CharT, Traits > &os)
 将 wch 输出到流。
template<class Traits>
void to_stream (wchar_t wch, std::basic_ostream< wchar_t, Traits > &os)
 将 wch 输出到流。
template<class CharT, class Traits>
void to_stream (const std::string &str, std::basic_ostream< CharT, Traits > &os)
 将 std::string 输出到流。
template<class CharT, class Traits>
void to_stream (const std::wstring &wstr, std::basic_ostream< CharT, Traits > &os)
 将 std::wstring 输出到流。
template<class CharT, class Traits>
void to_stream (const char *str, std::basic_ostream< CharT, Traits > &os)
 将 const char * 输出到流。
template<class CharT, class Traits>
void to_stream (const wchar_t *wstr, std::basic_ostream< CharT, Traits > &os)
 将 const wchar_t * 输出到流。
template<class CharT, class Traits, std::size_t N>
void to_stream (char(&arr)[N], std::basic_ostream< CharT, Traits > &os)
template<class CharT, class Traits, std::size_t N>
void to_stream (wchar_t(&arr)[N], std::basic_ostream< CharT, Traits > &os)
template<class CharT, class Traits, class T>
std::enable_if<!std::is_same< typenamestd::decay< T >::type, char >::value &&!std::is_same< typenamestd::decay< T >::type, wchar_t >::value &&!std::is_same< typenamestd::decay< T >::type, char * >::value &&!std::is_same< typenamestd::decay< T >::type, wchar_t * >::value &&!std::is_same< typenamestd::decay< T >::type, std::string >::value &&!std::is_same< typenamestd::decay< T >::type, std::wstring >::value >::type to_stream (T &&value, std::basic_ostream< CharT, Traits > &os)
template<class... Args>
std::string to_string (Args &&...args)
 将任意多个参数转换为字符串并拼接(无分隔符)。
template<class CharT, class Traits, class Allocator, class... Args>
void from_string (std::basic_string< CharT, Traits, Allocator > str, Args &...args)
 将字符串中的值提取到多个参数中,参数类型由调用者指定。
template<class F>
DeferGuard< typename std::decay< F >::type > make_defer (F &&f)
 工厂函数,创建DeferGuard对象。
template<class Derived, class T>
Generator< Derived, T >::iterator iter (Generator< Derived, T > &g)
 获取生成器迭代器的辅助函数。
template<class Derived, class T>
T next (typename Generator< Derived, T >::iterator &it)
 从迭代器获取下一个值的辅助函数。
template<class Derived, class T, class CharT = char, class Traits = std::char_traits<CharT>>
std::basic_ostream< CharT, Traits > & print_generator (std::basic_ostream< CharT, Traits > &os, const Generator< Derived, T > &gen)
 将 Generator 的内容输出到流,格式为 [elem1, elem2, ...]。
template<class Derived, class T, class CharT = char, class Traits = std::char_traits<CharT>>
std::basic_ostream< CharT, Traits > & operator<< (std::basic_ostream< CharT, Traits > &os, const Generator< Derived, T > &gen)
 输出 Generator 到流的 operator<< 重载。
template<class Iter>
IteratorPair< Iter > iterpair (Iter beg, Iter end)
 工厂函数,构建 IteratorPair。
template<class C1, class C2>
IteratorPair< TiedIterators< typename C1::iterator, typename C2::iterator > > zip (C1 &c1, C2 &c2)
 将两个容器“拉链”式地绑定在一起,以便同时迭代。
template<class C1, class C2>
IteratorPair< TiedIterators< typename C1::const_iterator, typename C2::const_iterator > > zip (const C1 &c1, const C2 &c2)
 针对两个常量容器的 zip 版本。
template<class C1, class C2>
IteratorPair< TiedIterators< typename C1::const_iterator, typename C2::iterator > > zip (const C1 &c1, C2 &c2)
 针对第一个容器为常量、第二个容器为非常量的 zip 版本。
template<class C1, class C2>
IteratorPair< TiedIterators< typename C1::iterator, typename C2::const_iterator > > zip (C1 &c1, const C2 &c2)
 针对第一个容器为非常量、第二个容器为常量的 zip 版本。
BasicLogging & get_logger ()
 内部单例(char)。
template<class... Ts>
Params< typename std::decay< Ts >::type... > params (Ts &&...values)
 便捷函数,用于构造 Params 对象。
CmdResult syscmd (const std::string &exe, const std::vector< std::string > &args={}, const std::map< std::string, std::string > &kwargs={})
 执行系统命令并捕获输出。
int & passed_count ()
 获取通过的测试用例数量。
int & failed_count ()
 获取失败的测试用例数量。
void pre_summary ()
 构造守卫对象,程序结束时输出摘要。
std::string ptr_to_str (const char *s)
 辅助函数:安全地将 C 字符串转换为显示字符串。
Time nanoseconds (double n)
 静态函数,构造纳秒。
Time microseconds (double n)
 静态函数,构造微秒。
Time milliseconds (double n)
 静态函数,构造毫秒。
Time seconds (double n)
 静态函数,构造秒。
Time minutes (double n)
 静态函数,构造分钟。
Time hours (double n)
 静态函数,构造小时。
Time now ()
 获取当前时间点(自纪元以来的纳秒数)。
Time operator""_ns (unsigned long long ns)
 纳秒字面量(整数)。
Time operator""_us (unsigned long long us)
 微秒字面量(整数)。
Time operator""_ms (unsigned long long ms)
 毫秒字面量(整数)。
Time operator""_s (unsigned long long s)
 秒字面量(整数)。
Time operator""_min (unsigned long long min)
 分钟字面量(整数)。
Time operator""_hr (unsigned long long hr)
 小时字面量(整数)。
Time operator""_ns (long double ns)
 纳秒字面量(浮点数)。
Time operator""_us (long double us)
 微秒字面量(浮点数)。
Time operator""_ms (long double ms)
 毫秒字面量(浮点数)。
Time operator""_s (long double s)
 秒字面量(浮点数)。
Time operator""_min (long double min)
 分钟字面量(浮点数)。
Time operator""_hr (long double hr)
 小时字面量(浮点数)。
template<class F, class... Args>
Time timer (F &&f, Args &&...args)
 测量函数调用的执行时间。
void sleep (const Time &tr)
 休眠指定时间。
std::string datetime (const std::string &fmt="%Y-%m-%d %H:%M:%S")
 获取当前日期时间字符串。
double fps (double target)
 控制循环的帧率。

Variables

static constexpr char meta [] = "CONSOLE-LIB-2026-09-06-MRXIE1109"
 本库的元数据,用于标识库的版本和作者 (顺便充当二进制水印)。
static constexpr nothing_t nothing
static constexpr ignore_t ignore
 全局 ignore 实例,可用于忽略任意参数。
static BasicInputSettings input_settings
 全局默认输入设置
static BasicInputSettings< wchar_t > w_input_settings
 全局默认宽字符输入设置
static BasicOutput & print = get_print()
 全局输出对象,模仿 Python 的 print 函数。
static BasicOutput< wchar_t > & wprint = get_wprint()
 全局宽字符输出。
static const bool & supports_ansi = false
 可能佯败
static constexpr char pi []
 字符串形式的 PI,精度位小数点后 1000 位,含 "3." 和 "\0" 共计 1003。
static BasicLogging & logger = get_logger()
 全局默认 logger 实例,启用颜色,级别 INFO。

Detailed Description

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

Typedef Documentation

◆ FormatSpec

◆ INIConfig

BasicINIConfig<char> 的类型别名。

◆ InputSettings

◆ Logging

BasicLogging<char> 的类型别名。

◆ Output

BasicOutput<char> 的类型别名。

◆ Path

using console::Path = BasicPath<char>

窄字符路径类型。

◆ Progress

template<class Iter>
using console::Progress = BasicProgress<char, std::char_traits<char>, Iter>

BasicProgress<char, std::char_traits<char>, Iter> 的类型别名。

◆ ProgressConfig

◆ Rational

using console::Rational = BasicRational<intmax_t>

以 intmax_t 为基的分数。

◆ Rational_16

以 int16_t 为基的分数。

◆ Rational_32

以 int32_t 为基的分数。

◆ Rational_64

以 int64_t 为基的分数。

◆ Rational_8

以 int8_t 为基的分数。

◆ Regex

using console::Regex = BasicRegex<char>

字符正则表达式。

◆ WFormatSpec

◆ WINIConfig

BasicINIConfig<wchar_t> 的类型别名。

◆ WInputSettings

◆ WLogging

using console::WLogging = BasicLogging<wchar_t>

BasicLogging<wchar_t> 的类型别名。

◆ WOutput

using console::WOutput = BasicOutput<wchar_t>

BasicOutput<wchar_t> 的类型别名。

◆ WPath

using console::WPath = BasicPath<wchar_t>

宽字符路径类型。

◆ WProgress

template<class Iter>
using console::WProgress = BasicProgress<wchar_t, std::char_traits<wchar_t>, Iter>

BasicProgress<wchar_t, std::char_traits<wchar_t>, Iter> 的类型别名。

◆ WProgressConfig

◆ WRegex

using console::WRegex = BasicRegex<wchar_t>

宽字符正则表达式。

Enumeration Type Documentation

◆ Instrument

enum class console::Instrument : unsigned char
strong

128 种 GM 标准乐器编号(0-127)。

枚举值与 MIDI 程序变更号对应,默认乐器为 AcousticGrandPiano。

Enumerator
AcousticGrandPiano 

大钢琴 (默认)

BrightAcousticPiano 

明亮的钢琴

ElectricGrandPiano 

电子大钢琴

HonkyTonkPiano 

酒吧钢琴

ElectricPiano1 

电钢琴 1

ElectricPiano2 

电钢琴 2

Harpsichord 

大键琴

Clavinet 

击弦古钢琴

Celesta 

钢片琴

Glockenspiel 

钟琴

MusicBox 

八音盒

Vibraphone 

颤音琴

Marimba 

马林巴

Xylophone 

木琴

TubularBells 

管钟

Dulcimer 

扬琴

DrawbarOrgan 

拉杆风琴

PercussiveOrgan 

打击型风琴

RockOrgan 

摇滚风琴

ChurchOrgan 

教堂风琴

ReedOrgan 

簧风琴

Accordion 

手风琴

Harmonica 

口琴

TangoAccordion 

探戈手风琴

AcousticGuitarNylon 

尼龙弦吉他

AcousticGuitarSteel 

钢弦吉他

ElectricGuitarJazz 

爵士吉他

ElectricGuitarClean 

清音电吉他

ElectricGuitarMuted 

闷音吉他

OverdrivenGuitar 

过载吉他

DistortionGuitar 

失真吉他

GuitarHarmonics 

吉他泛音

AcousticBass 

原声贝司

ElectricBassFinger 

指拨电贝司

ElectricBassPick 

拨片电贝司

FretlessBass 

无品贝司

SlapBass1 

击弦贝司 1

SlapBass2 

击弦贝司 2

SynthBass1 

合成贝司 1

SynthBass2 

合成贝司 2

Violin 

小提琴

Viola 

中提琴

Cello 

大提琴

Contrabass 

低音提琴

TremoloStrings 

弦乐颤音

PizzicatoStrings 

弦乐拨奏

OrchestralHarp 

竖琴

Timpani 

定音鼓

StringEnsemble1 

弦乐合奏 1

StringEnsemble2 

弦乐合奏 2

SynthStrings1 

合成弦乐 1

SynthStrings2 

合成弦乐 2

ChoirAahs 

合唱 "啊"

VoiceOohs 

人声 "哦"

SynthVoice 

合成人声

OrchestraHit 

乐队打击乐

Trumpet 

小号

Trombone 

长号

Tuba 

大号

MutedTrumpet 

弱音小号

FrenchHorn 

圆号

BrassSection 

铜管组

SynthBrass1 

合成铜管 1

SynthBrass2 

合成铜管 2

SopranoSax 

高音萨克斯

AltoSax 

中音萨克斯

TenorSax 

次中音萨克斯

BaritoneSax 

上低音萨克斯

Oboe 

双簧管

EnglishHorn 

英国管

Bassoon 

巴松管

Clarinet 

单簧管

Piccolo 

短笛

Flute 

长笛

Recorder 

竖笛

PanFlute 

排箫

BlownBottle 

吹瓶口

Shakuhachi 

尺八

Whistle 

口哨

Ocarina 

奥卡雷纳

Lead1Square 

方波领奏

Lead2Sawtooth 

锯齿波领奏

Lead3Calliope 

汽笛风琴

Lead4Chiff 

气声领奏

Lead5Charang 

炭精吉他

Lead6Voice 

人声领奏

Lead7Fifths 

五度领奏

Lead8BassLead 

贝司领奏

Pad1NewAge 

新世纪背景

Pad2Warm 

温暖背景

Pad3Polysynth 

复音合成背景

Pad4Choir 

合唱背景

Pad5Bowed 

弓弦背景

Pad6Metallic 

金属背景

Pad7Halo 

光环背景

Pad8Sweep 

扫弦背景

Fx1Rain 

雨声

Fx2Soundtrack 

电影配乐

Fx3Crystal 

水晶

Fx4Atmosphere 

大气

Fx5Brightness 

明亮

Fx6Goblins 

小妖

Fx7Echoes 

回声

Fx8SciFi 

科幻

Sitar 

西塔琴

Banjo 

班卓琴

Shamisen 

三味线

Koto 

古筝

Kalimba 

卡林巴

Bagpipe 

风笛

Fiddle 

民间提琴

Shanai 

唢呐

TinkleBell 

铃铛

Agogo 

阿果果铃

SteelDrums 

钢鼓

Woodblock 

木鱼

TaikoDrum 

太鼓

MelodicTom 

旋律通鼓

SynthDrum 

合成鼓

ReverseCymbal 

反奏钹

GuitarFretNoise 

吉他擦弦声

BreathNoise 

呼吸声

Seashore 

海浪

BirdTweet 

鸟鸣

TelephoneRing 

电话铃

Helicopter 

直升机

Applause 

掌声

Gunshot 

枪声

◆ Key

enum class console::Key : int
strong

用于表示常用按键的枚举。

Enumerator
None 
Unknown 
A 
B 
C 
D 
E 
F 
G 
H 
I 
J 
K 
L 
M 
N 
O 
P 
Q 
R 
S 
T 
U 
V 
W 
X 
Y 
Z 
Num0 
Num1 
Num2 
Num3 
Num4 
Num5 
Num6 
Num7 
Num8 
Num9 
Space 
Enter 
Esc 
Backspace 
Tab 
Up 
Down 
Left 
Right 
F1 
F2 
F3 
F4 
F5 
F6 
F7 
F8 
F9 
F10 
F11 
F12 

◆ Signal

enum class console::Signal : int
strong

常用信号枚举。

Enumerator
Interrupt 

中断信号 (Ctrl+C)

Terminate 

终止信号

Kill 

强制杀死信号

Stop 

停止进程信号

Continue 

继续运行信号

Hangup 

挂起信号

User1 

用户自定义信号1

User2 

用户自定义信号2

Function Documentation

◆ all()

template<class T, size_t... Dims>
bool console::all ( const MultiArray< T, Dims... > & a)

检查所有元素是否都为 true(逻辑与归约)。

Returns
bool 若所有元素均为真则返回 true。

◆ any()

template<class T, size_t... Dims>
bool console::any ( const MultiArray< T, Dims... > & a)

检查是否存在至少一个 true 元素(逻辑或归约)。

Returns
bool 若至少一个元素为真则返回 true。

◆ async()

template<class F, class... Args>
auto console::async ( F && f,
Args &&... args ) -> std::future< decltype(std::forward< F >(f)(std::forward< Args >(args)...))>
inline

提交一个可调用对象到全局线程池执行。

Template Parameters
F可调用对象的类型。
Args参数包的类型。
Parameters
f要执行的可调用对象。
args传递给可调用对象的参数。
Returns
std::future<...> 与任务关联的 future 对象,用于获取返回值。
Exceptions
AsyncError如果线程池正在关闭,则抛出异常。
See also
std::async

◆ author()

std::string console::author ( )
inline

返回库的作者。

Returns
std::string "MrXie1109"。

◆ cc() [1/2]

void console::cc ( const char * clr = color::Reset,
std::ostream & os = std::cout )
inline

修改颜色。

Parameters
clr颜色,默认 Reset。
os输出流,默认 std::cout。
Note
cc = change color

◆ cc() [2/2]

void console::cc ( const char * clr = color::Reset,
std::wostream & os = std::wcout )
inline

修改颜色。

Parameters
clr颜色,默认 Reset。
os输出流,默认 std::cout。
Note
cc = change color

◆ clear()

void console::clear ( )
inlinenoexcept

清空整个屏幕并将光标复位到 (1,1)。

◆ clear_line()

void console::clear_line ( )
inlinenoexcept

清空当前光标所在行。

◆ clear_screen_save()

void console::clear_screen_save ( )
inlinenoexcept

清空屏幕并保留历史。

◆ clear_to_eol()

void console::clear_to_eol ( )
inlinenoexcept

清空从光标位置到行尾。

◆ compare()

template<class T, class U, size_t... Dims>
int console::compare ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

比较两个 MultiArray 的大小。

Returns
若 a < b (字典序) 则返回 -1,若 a > b 则返回 1,否则返回 0。

◆ compiler()

std::string console::compiler ( )
inline

返回当前使用的编译器名称和版本。

支持 GCC(版本号)、MSVC(版本号)、Clang(仅名称)以及其他。

Returns
std::string 编译器信息。

◆ datetime()

std::string console::datetime ( const std::string & fmt = "%Y-%m-%d %H:%M:%S")
inline

获取当前日期时间字符串。

Parameters
fmt格式化字符串,默认为 "%Y-%m-%d %H:%M:%S"。
Returns
std::string 格式化后的日期时间字符串。

格式化语法与 std::put_time 相同。

◆ equals() [1/4]

template<class T, class U, size_t... Dims>
bool console::equals ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

检查两个 MultiArray 是否相等。

Returns
bool 若两个 MultiArray 相等则返回 true。

◆ equals() [2/4]

template<class T, class U, size_t... Dims, class Op>
bool console::equals ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b,
Op && op )

检查两个 MultiArray 是否相等。

Returns
bool 若两个 MultiArray 相等则返回 true。

◆ equals() [3/4]

template<class T, class U, size_t... Dims1, size_t... Dims2>
bool console::equals ( const MultiArray< T, Dims1... > & ,
const MultiArray< U, Dims2... > &  )
constexpr

检查两个 MultiArray 是否相等。

Returns
恒假。

◆ equals() [4/4]

template<class T, class U, size_t... Dims1, size_t... Dims2, class Op>
bool console::equals ( const MultiArray< T, Dims1... > & ,
const MultiArray< U, Dims2... > & ,
Op &&  )
constexpr

检查两个 MultiArray 是否相等。

Returns
恒假。

◆ failed_count()

int & console::failed_count ( )
inline

获取失败的测试用例数量。

Returns
已失败的测试用例数量。
Note
你不应该使用内部细节。

◆ for_each()

template<class T, size_t N, class F>
F console::for_each ( Channel< T, N > & channel,
F && func )
inline

遍历通道中的所有元素。

Parameters
channel要遍历的通道。
func遍历函数。
Returns
操作后的遍历函数。
Note
相对于 range-based for,这个函数可以做到确保不抛出异常, Channel 的 range-based for 对于会关闭的函数若在检查与取值之间 close, 则会抛出一个 AsyncError,而这个函数不会被钻空子。

◆ format() [1/2]

template<typename... Args>
std::string console::format ( const std::string & fmt,
const Args &... args )

格式化字符串(char 版)。

Template Parameters
Args参数类型。
Parameters
fmt格式字符串。
args要格式化的参数。
Returns
std::string 格式化后的字符串。
Exceptions
BadFormat格式错误时抛出。

◆ format() [2/2]

template<typename... Args>
std::wstring console::format ( const std::wstring & fmt,
const Args &... args )

格式化字符串(wchar_t 版)。

Template Parameters
Args参数类型。
Parameters
fmt格式字符串。
args要格式化的参数。
Returns
std::wstring 格式化后的宽字符串。
Exceptions
BadFormat格式错误时抛出。

◆ fps()

double console::fps ( double target)
inline

控制循环的帧率。

Parameters
target目标帧率。
Returns
double 实际帧率。

◆ get_logger()

BasicLogging & console::get_logger ( )
inline

内部单例(char)。

◆ get_print()

BasicOutput & console::get_print ( )
inline

内部单例(char)。

◆ get_terminal_size()

std::pair< int, int > console::get_terminal_size ( )
inlinenoexcept

获取终端尺寸(行数和列数)。

Returns
std::pair<int, int>,first为rows,second为cols。
Note
失败时返回 {0, 0}。

◆ get_wprint()

BasicOutput< wchar_t > & console::get_wprint ( )
inline

内部单例(wchar_t)。

◆ gotoxy()

void console::gotoxy ( int x,
int y )
inlinenoexcept

将光标移动到指定位置。

Parameters
x列坐标(从 1 开始)
y行坐标(从 1 开始)

◆ hide_cursor()

void console::hide_cursor ( )
inlinenoexcept

隐藏光标(提高视觉效果)。

◆ hours()

Time console::hours ( double n)
inline

静态函数,构造小时。

Parameters
n小时数。
Returns
Time 构造而来的小时。

◆ input()

template<class T = std::string, class CharT = char>
T console::input ( const CharT * prompt = "",
const BasicInputSettings< CharT > & is = input_settings )

从标准输入读取一个值,支持类型模板。

Template Parameters
T要读取的类型,默认为 std::string。
CharT字符类型。
Parameters
prompt提示字符串。
is输入设置(默认使用全局 input_settings)。
Returns
T 读取的值。
Note
若输入失败(如类型不匹配),会清空错误状态并重新提示,直到成功。

◆ input_all()

template<class CharT = char>
std::basic_string< CharT > console::input_all ( const CharT * prompt = "",
const BasicInputSettings< CharT > & is = input_settings )

读取输入流中剩余的全部内容(直到 EOF)。

Parameters
prompt提示字符串。
is输入设置。
Returns
std::basic_string<CharT> 从当前位置到流末尾的所有字符。

◆ input_char()

template<class CharT = char>
CharT console::input_char ( const CharT * prompt = "",
const BasicInputSettings< CharT > & is = input_settings )

读取一个字符。

Template Parameters
CharT字符类型。
Parameters
prompt提示字符串。
is输入设置。
Returns
CharT 读取的第一个字符。

◆ input_line()

template<class CharT = char>
std::basic_string< CharT > console::input_line ( const CharT * prompt = "",
const BasicInputSettings< CharT > & is = input_settings )

读取一整行字符串(包含空格)。

Parameters
prompt提示字符串。
is输入设置。
Returns
std::basic_string<CharT> 读取的行(不含换行符)。

◆ input_number()

long double console::input_number ( const char * prompt = "Type a number: ",
const InputSettings & is = input_settings )
inline

读取一个 long double 类型的数字。

Parameters
prompt提示字符串(默认为 "Type a number: ")。
is输入设置。
Returns
long double 读取的数字。

◆ input_with_range()

template<class T, class CharT = char>
T console::input_with_range ( T min,
T max,
const CharT * prompt = "",
const BasicInputSettings< CharT > & is = input_settings )

读取一个在指定范围内的数字。

Template Parameters
T输入类型。
CharT字符类型。
Parameters
min最小值(包含)。
max最大值(包含)。
prompt提示字符串。
is输入设置。
Returns
T 验证后的数字。
Note
若输入超出范围,会输出错误信息并重新提示。

◆ input_yes_or_no()

bool console::input_yes_or_no ( const char * prompt = "Type yes or no: ",
const InputSettings & is = input_settings )
inline

读取一个 y/n 确认,返回布尔值。

Parameters
prompt提示字符串。
is输入设置。
Returns
bool true 若输入 'Y'/'y',false 若输入 'N'/'n'。

◆ is_prime()

bool console::is_prime ( uint64_t n)
inlinenoexcept

确定性素数判定。

先用小素数试除,再使用一组固定底数进行 Miller-Rabin 测试。 对 uint64_t 范围内的所有数均具有确定性。

Parameters
n待判定的数。
Returns
true 如果 n 是素数。
false 如果 n 是合数。
Note
底数集合对于 2^64 以内的所有数有效。

◆ iter()

template<class Derived, class T>
Generator< Derived, T >::iterator console::iter ( Generator< Derived, T > & g)

获取生成器迭代器的辅助函数。

Parameters
g生成器对象的引用。
Returns
生成器迭代器。

◆ iterpair()

template<class Iter>
IteratorPair< Iter > console::iterpair ( Iter beg,
Iter end )

工厂函数,构建 IteratorPair。

Template Parameters
Iter迭代器类型。
Parameters
beg首迭代器。
end超尾迭代器。

◆ license()

std::string console::license ( )
inline

返回 MIT 许可证全文。

Returns
std::string 许可证文本。

◆ make_defer()

template<class F>
DeferGuard< typename std::decay< F >::type > console::make_defer ( F && f)

工厂函数,创建DeferGuard对象。

Parameters
f推迟执行的函数。
Returns
DeferGuard对象。
Examples
/media/xie/MrXie1109/Data/console/include/util/defer.h.

◆ max()

template<class T, size_t... Dims>
T console::max ( const MultiArray< T, Dims... > & a)

求最大值。

Returns
T 最大值。

◆ microseconds()

Time console::microseconds ( double n)
inline

静态函数,构造微秒。

Parameters
n微秒数。
Returns
Time 构造而来的微秒。

◆ miller_rabin_test()

bool console::miller_rabin_test ( uint64_t n,
uint64_t a )
inlinenoexcept

单次 Miller-Rabin 素性测试。

以 a 为底数对 n 进行 Miller-Rabin 测试,判定 n 是否为合数。

Parameters
n待测试的数。
a底数。
Returns
true 如果 n 通过以 a 为底的测试(可能为素数)。
false 如果 n 确定是合数。

◆ milliseconds()

Time console::milliseconds ( double n)
inline

静态函数,构造毫秒。

Parameters
n毫秒数。
Returns
Time 构造而来的毫秒。

◆ min()

template<class T, size_t... Dims>
T console::min ( const MultiArray< T, Dims... > & a)

求最小值。

Returns
T 最小值。

◆ minutes()

Time console::minutes ( double n)
inline

静态函数,构造分钟。

Parameters
n分钟数。
Returns
Time 构造而来的分钟。

◆ mod_mul()

uint64_t console::mod_mul ( uint64_t a,
uint64_t b,
uint64_t mod )
inlinenoexcept

使用二进制加法模拟模乘。

当编译器不支持 __int128 时,通过循环加法避免溢出。 (注:如果你在用 MSVC,建议换 MinGW 或 Clang,真的。)

Parameters
a乘数。
b被乘数。
mod模数。
Returns
uint64_t (a * b) % mod 的结果。

◆ mod_pow()

uint64_t console::mod_pow ( uint64_t a,
uint64_t b,
uint64_t mod )
inlinenoexcept

模幂运算。

使用二进制快速幂算法计算 (a^b) % mod。

Parameters
a底数。
b指数。
mod模数。
Returns
uint64_t (a^b) % mod 的结果。

◆ moved()

void console::moved ( int n = 1)
inlinenoexcept

向下相对移动。

Parameters
n移动的步数,默认为1。

◆ movel()

void console::movel ( int n = 1)
inlinenoexcept

向左相对移动。

Parameters
n移动的步数,默认为1。

◆ mover()

void console::mover ( int n = 1)
inlinenoexcept

向右相对移动。

Parameters
n移动的步数,默认为1。

◆ moveu()

void console::moveu ( int n = 1)
inlinenoexcept

向上相对移动。

Parameters
n移动的步数,默认为1。

◆ nanoseconds()

Time console::nanoseconds ( double n)
inline

静态函数,构造纳秒。

Parameters
n纳秒数。
Returns
Time 构造而来的纳秒。

◆ next()

template<class Derived, class T>
T console::next ( typename Generator< Derived, T >::iterator & it)

从迭代器获取下一个值的辅助函数。

Parameters
it生成器迭代器的引用。
Returns
下一个值。

◆ now()

Time console::now ( )
inline

获取当前时间点(自纪元以来的纳秒数)。

Returns
Time 当前时间点。

◆ operator!()

template<class T, size_t... Dims>
MultiArray< bool, Dims... > console::operator! ( const MultiArray< T, Dims... > & a)

◆ operator!=() [1/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator!= ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator!=() [2/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator!= ( const MultiArray< T, Dims... > & a,
const U & b )

◆ operator!=() [3/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator!= ( const U & a,
const MultiArray< T, Dims... > & b )

◆ operator""_hr() [1/2]

Time console::operator""_hr ( long double hr)
inline

小时字面量(浮点数)。

Parameters
hr小时数。
Returns
Time 表示指定小时数的 Time 对象。

◆ operator""_hr() [2/2]

Time console::operator""_hr ( unsigned long long hr)
inline

小时字面量(整数)。

Parameters
hr小时数。
Returns
Time 表示指定小时数的 Time 对象(转换为纳秒)。

◆ operator""_min() [1/2]

Time console::operator""_min ( long double min)
inline

分钟字面量(浮点数)。

Parameters
min分钟数。
Returns
Time 表示指定分钟数的 Time 对象。

◆ operator""_min() [2/2]

Time console::operator""_min ( unsigned long long min)
inline

分钟字面量(整数)。

Parameters
min分钟数。
Returns
Time 表示指定分钟数的 Time 对象(转换为纳秒)。

◆ operator""_ms() [1/2]

Time console::operator""_ms ( long double ms)
inline

毫秒字面量(浮点数)。

Parameters
ms毫秒数。
Returns
Time 表示指定毫秒数的 Time 对象。

◆ operator""_ms() [2/2]

Time console::operator""_ms ( unsigned long long ms)
inline

毫秒字面量(整数)。

Parameters
ms毫秒数。
Returns
Time 表示指定毫秒数的 Time 对象(转换为纳秒)。

◆ operator""_ns() [1/2]

Time console::operator""_ns ( long double ns)
inline

纳秒字面量(浮点数)。

Parameters
ns纳秒数(可为小数)。
Returns
Time 表示指定纳秒数的 Time 对象。

◆ operator""_ns() [2/2]

Time console::operator""_ns ( unsigned long long ns)
inline

纳秒字面量(整数)。

Parameters
ns纳秒数。
Returns
Time 表示指定纳秒数的 Time 对象。

◆ operator""_s() [1/2]

Time console::operator""_s ( long double s)
inline

秒字面量(浮点数)。

Parameters
s秒数。
Returns
Time 表示指定秒数的 Time 对象。

◆ operator""_s() [2/2]

Time console::operator""_s ( unsigned long long s)
inline

秒字面量(整数)。

Parameters
s秒数。
Returns
Time 表示指定秒数的 Time 对象(转换为纳秒)。

◆ operator""_us() [1/2]

Time console::operator""_us ( long double us)
inline

微秒字面量(浮点数)。

Parameters
us微秒数。
Returns
Time 表示指定微秒数的 Time 对象。

◆ operator""_us() [2/2]

Time console::operator""_us ( unsigned long long us)
inline

微秒字面量(整数)。

Parameters
us微秒数。
Returns
Time 表示指定微秒数的 Time 对象(转换为纳秒)。

◆ operator%() [1/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() % std::declval< U >()), Dims... > console::operator% ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator%() [2/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() % std::declval< U >()), Dims... > console::operator% ( const MultiArray< T, Dims... > & a,
const U & b )

◆ operator%() [3/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() % std::declval< U >()), Dims... > console::operator% ( const U & a,
const MultiArray< T, Dims... > & b )

◆ operator%=() [1/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator%= ( MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator%=() [2/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator%= ( MultiArray< T, Dims... > & a,
const U & b )

◆ operator&() [1/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() &std::declval< U >()), Dims... > console::operator& ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator&() [2/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() &std::declval< U >()), Dims... > console::operator& ( const MultiArray< T, Dims... > & a,
const U & b )

◆ operator&() [3/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() &std::declval< U >()), Dims... > console::operator& ( const U & a,
const MultiArray< T, Dims... > & b )

◆ operator&&() [1/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator&& ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator&&() [2/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator&& ( const MultiArray< T, Dims... > & a,
const U & b )

◆ operator&&() [3/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator&& ( const U & a,
const MultiArray< T, Dims... > & b )

◆ operator&=() [1/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator&= ( MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator&=() [2/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator&= ( MultiArray< T, Dims... > & a,
const U & b )

◆ operator*() [1/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() *std::declval< U >()), Dims... > console::operator* ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator*() [2/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() *std::declval< U >()), Dims... > console::operator* ( const MultiArray< T, Dims... > & a,
const U & b )

◆ operator*() [3/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() *std::declval< U >()), Dims... > console::operator* ( const U & a,
const MultiArray< T, Dims... > & b )

◆ operator*=() [1/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator*= ( MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator*=() [2/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator*= ( MultiArray< T, Dims... > & a,
const U & b )

◆ operator+() [1/4]

template<class T, size_t... Dims>
MultiArray< decltype(+std::declval< T >()), Dims... > console::operator+ ( const MultiArray< T, Dims... > & a)

◆ operator+() [2/4]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()+std::declval< U >()), Dims... > console::operator+ ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator+() [3/4]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()+std::declval< U >()), Dims... > console::operator+ ( const MultiArray< T, Dims... > & a,
const U & b )

◆ operator+() [4/4]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()+std::declval< U >()), Dims... > console::operator+ ( const U & a,
const MultiArray< T, Dims... > & b )

◆ operator+=() [1/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator+= ( MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator+=() [2/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator+= ( MultiArray< T, Dims... > & a,
const U & b )

◆ operator-() [1/4]

template<class T, size_t... Dims>
MultiArray< decltype(- std::declval< T >()), Dims... > console::operator- ( const MultiArray< T, Dims... > & a)

◆ operator-() [2/4]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() - std::declval< U >()), Dims... > console::operator- ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator-() [3/4]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() - std::declval< U >()), Dims... > console::operator- ( const MultiArray< T, Dims... > & a,
const U & b )

◆ operator-() [4/4]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() - std::declval< U >()), Dims... > console::operator- ( const U & a,
const MultiArray< T, Dims... > & b )

◆ operator-=() [1/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator-= ( MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator-=() [2/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator-= ( MultiArray< T, Dims... > & a,
const U & b )

◆ operator/() [1/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()/std::declval< U >()), Dims... > console::operator/ ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator/() [2/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()/std::declval< U >()), Dims... > console::operator/ ( const MultiArray< T, Dims... > & a,
const U & b )

◆ operator/() [3/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()/std::declval< U >()), Dims... > console::operator/ ( const U & a,
const MultiArray< T, Dims... > & b )

◆ operator/=() [1/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator/= ( MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator/=() [2/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator/= ( MultiArray< T, Dims... > & a,
const U & b )

◆ operator<() [1/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator< ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator<() [2/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator< ( const MultiArray< T, Dims... > & a,
const U & b )

◆ operator<() [3/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator< ( const U & a,
const MultiArray< T, Dims... > & b )

◆ operator<<() [1/7]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()<< std::declval< U >()), Dims... > console::operator<< ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator<<() [2/7]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()<< std::declval< U >()), Dims... > console::operator<< ( const MultiArray< T, Dims... > & a,
const U & b )

◆ operator<<() [3/7]

template<class T, class U, size_t... Dims>
std::enable_if<!std::is_base_of< std::ios_base, U >::value, MultiArray< decltype(std::declval< U >()<< std::declval< T >()), Dims... > >::type console::operator<< ( const U & value,
const MultiArray< T, Dims... > & a )

◆ operator<<() [4/7]

template<class Derived, class T, class CharT = char, class Traits = std::char_traits<CharT>>
std::basic_ostream< CharT, Traits > & console::operator<< ( std::basic_ostream< CharT, Traits > & os,
const Generator< Derived, T > & gen )

输出 Generator 到流的 operator<< 重载。

◆ operator<<() [5/7]

template<class CharT, class Traits, class Container>
std::basic_ostream< CharT, Traits > & console::operator<< ( std::basic_ostream< CharT, Traits > & os,
const View< Container > & v )

输出任意视图的内容。

Template Parameters
CharT流的字符类型。
Traits流的字符特征类型。
T容器类型。
Parameters
os输出流。
v视图对象。
Returns
std::basic_ostream<CharT, Traits>& 流引用。

◆ operator<<() [6/7]

template<class CharT, class Traits>
std::basic_ostream< CharT, Traits > & console::operator<< ( std::basic_ostream< CharT, Traits > & os,
const View< std::string > & sv )
inline

输出 std::string 视图的内容。

Template Parameters
CharT流的字符类型。
Traits流的字符特征类型。
Parameters
os输出流。
sv字符串视图。
Returns
std::basic_ostream<CharT, Traits>& 流引用。

◆ operator<<() [7/7]

std::ostream & console::operator<< ( std::ostream & os,
Key k )
inline

让 Key 可以被打印。

Parameters
os输出流。
k要打印的 Key。
Returns
os 输出流的引用。

◆ operator<<=() [1/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator<<= ( MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator<<=() [2/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator<<= ( MultiArray< T, Dims... > & a,
const U & b )

◆ operator<=() [1/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator<= ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator<=() [2/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator<= ( const MultiArray< T, Dims... > & a,
const U & b )

◆ operator<=() [3/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator<= ( const U & a,
const MultiArray< T, Dims... > & b )

◆ operator==() [1/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator== ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator==() [2/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator== ( const MultiArray< T, Dims... > & a,
const U & b )

◆ operator==() [3/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator== ( const U & a,
const MultiArray< T, Dims... > & b )

◆ operator>() [1/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator> ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator>() [2/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator> ( const MultiArray< T, Dims... > & a,
const U & b )

◆ operator>() [3/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator> ( const U & a,
const MultiArray< T, Dims... > & b )

◆ operator>=() [1/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator>= ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator>=() [2/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator>= ( const MultiArray< T, Dims... > & a,
const U & b )

◆ operator>=() [3/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator>= ( const U & a,
const MultiArray< T, Dims... > & b )

◆ operator>>() [1/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() > > std::declval< U >()), Dims... > console::operator>> ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator>>() [2/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() > > std::declval< U >()), Dims... > console::operator>> ( const MultiArray< T, Dims... > & a,
const U & b )

◆ operator>>() [3/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() > > std::declval< U >()), Dims... > console::operator>> ( const U & a,
const MultiArray< T, Dims... > & b )

◆ operator>>=() [1/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator>>= ( MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator>>=() [2/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator>>= ( MultiArray< T, Dims... > & a,
const U & b )

◆ operator^() [1/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() ^ std::declval< U >()), Dims... > console::operator^ ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator^() [2/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() ^ std::declval< U >()), Dims... > console::operator^ ( const MultiArray< T, Dims... > & a,
const U & b )

◆ operator^() [3/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >() ^ std::declval< U >()), Dims... > console::operator^ ( const U & a,
const MultiArray< T, Dims... > & b )

◆ operator^=() [1/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator^= ( MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator^=() [2/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator^= ( MultiArray< T, Dims... > & a,
const U & b )

◆ operator|() [1/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()|std::declval< U >()), Dims... > console::operator| ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator|() [2/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()|std::declval< U >()), Dims... > console::operator| ( const MultiArray< T, Dims... > & a,
const U & b )

◆ operator|() [3/3]

template<class T, class U, size_t... Dims>
MultiArray< decltype(std::declval< T >()|std::declval< U >()), Dims... > console::operator| ( const U & a,
const MultiArray< T, Dims... > & b )

◆ operator|=() [1/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator|= ( MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator|=() [2/2]

template<class T, class U, size_t... Dims>
MultiArray< T, Dims... > & console::operator|= ( MultiArray< T, Dims... > & a,
const U & b )

◆ operator||() [1/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator|| ( const MultiArray< T, Dims... > & a,
const MultiArray< U, Dims... > & b )

◆ operator||() [2/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator|| ( const MultiArray< T, Dims... > & a,
const U & b )

◆ operator||() [3/3]

template<class T, class U, size_t... Dims>
MultiArray< bool, Dims... > console::operator|| ( const U & a,
const MultiArray< T, Dims... > & b )

◆ operator~()

template<class T, size_t... Dims>
MultiArray< decltype(~ std::declval< T >()), Dims... > console::operator~ ( const MultiArray< T, Dims... > & a)

◆ params()

template<class... Ts>
Params< typename std::decay< Ts >::type... > console::params ( Ts &&... values)

便捷函数,用于构造 Params 对象。

Template Parameters
Ts参数类型包,由编译器自动推导。
Parameters
values要打包的参数值。
Returns
Params<typename std::decay<Ts>::type...> 包含所有参数值的 Params 对象。

利用模板参数推导,自动创建 Params 实例。 使用 std::decay 退化数组、去除引用和 cv 限定符,确保值语义。 使用示例:auto p = params(42, "hello", 3.14); p.apply([](int a, const char* b, double c) { ... });

◆ passed_count()

int & console::passed_count ( )
inline

获取通过的测试用例数量。

Returns
已通过的测试用例数量。
Note
你不应该使用内部细节。

◆ platform()

std::string console::platform ( )
inline

返回当前操作系统平台名称。

根据预定义宏识别 Windows、Linux、macOS 或 Unknown。

Returns
std::string 平台名称。

◆ pre_summary()

void console::pre_summary ( )
inline

构造守卫对象,程序结束时输出摘要。

Note
你不应该使用内部细节。

◆ print_generator()

template<class Derived, class T, class CharT = char, class Traits = std::char_traits<CharT>>
std::basic_ostream< CharT, Traits > & console::print_generator ( std::basic_ostream< CharT, Traits > & os,
const Generator< Derived, T > & gen )

将 Generator 的内容输出到流,格式为 [elem1, elem2, ...]。

Template Parameters
Derived派生类型(CRTP)。
T元素类型。
CharT流的字符类型。
Traits流的字符特征类型。
Parameters
os输出流。
gen生成器对象。
Returns
std::basic_ostream<CharT, Traits>& 流引用。

◆ progress()

template<class CharT = char, class Traits = std::char_traits<CharT>, class Cont>
auto console::progress ( Cont && cont,
const BasicProgressConfig< CharT, Traits > & pc ) -> BasicProgress< CharT, Traits, decltype(std::begin(cont))>
inline

创建进度条对象的辅助函数。

Template Parameters
CharT字符类型,默认为 char。
Traits字符特征类型。
Cont容器类型(支持转发引用)。
Parameters
cont容器。
pc进度条配置,默认为默认配置。
Returns
BasicProgress<CharT, Traits, decltype(std::begin(cont))>。

◆ ptr_to_str()

std::string console::ptr_to_str ( const char * s)
inline

辅助函数:安全地将 C 字符串转换为显示字符串。

◆ put() [1/2]

template<class CharT, class Traits, class OtherType>
std::enable_if<!is_string< typenamestd::decay< OtherType >::type >::value &&!is_char< typenamestd::decay< OtherType >::type >::value >::type console::put ( std::basic_ostream< CharT, Traits > & os,
OtherType && value )

否则,调用 repr 格式化。

Template Parameters
CharT流的字符类型。
Traits流的字符特征类型。
OtherType
Parameters
os输出流。
value要输出的值。
Note
调用 repr(value, os)。

◆ put() [2/2]

template<class CharT, class Traits, class StrOrCharType>
std::enable_if< is_string< typenamestd::decay< StrOrCharType >::type >::value||is_char< typenamestd::decay< StrOrCharType >::type >::value >::type console::put ( std::basic_ostream< CharT, Traits > & os,
StrOrCharType && value )
@brief 如果是字符和串或字符,直接输出,不含引号。
@tparam CharT 流的字符类型。
@tparam Traits 流的字符特征类型。
@tparam StrOrCharType
@param os 输出流。
Parameters
value要输出的值。
Note
直接输出。

◆ repr() [1/5]

template<class T, class CharT = char, class Traits = std::char_traits<CharT>>
std::enable_if< std::is_same< typenamestd::decay< T >::type, std::nullptr_t >::value >::type console::repr ( T && ,
std::basic_ostream< CharT, Traits > & os = std::cout )

输出 nullptr 的表示。

Template Parameters
CharT流的字符类型。
Traits流的字符特征类型。
T必须是 std::nullptr_t。
Parameters
valuenullptr。
os输出流。

◆ repr() [2/5]

template<class T, class CharT = char, class Traits = std::char_traits<CharT>>
std::enable_if<!std::is_same< typenamestd::decay< T >::type, std::nullptr_t >::value &&!is_string< typenamestd::decay< T >::type >::value &&!is_char< typenamestd::decay< T >::type >::value &&!is_basic_printable< CharT, Traits, typenamestd::decay< T >::type >::value >::type console::repr ( T && value,
std::basic_ostream< CharT, Traits > & os = std::cout )

输出不可打印类型的表示,格式为 "<'类型名' object at 地址>"。

Template Parameters
CharT流的字符类型。
Traits流的字符特征类型。
T类型条件:不是 nullptr,不是字符串,不是字符,且 is_basic_printable<T>::value 为 false。
Parameters
value要输出的对象。
os输出流。

◆ repr() [3/5]

template<class T, class CharT = char, class Traits = std::char_traits<CharT>>
std::enable_if<!std::is_same< typenamestd::decay< T >::type, bool >::value &&!std::is_same< typenamestd::decay< T >::type, std::nullptr_t >::value &&!is_string< typenamestd::decay< T >::type >::value &&!is_char< typenamestd::decay< T >::type >::value &&!std::is_function< typenamestd::remove_pointer< T >::type >::value &&is_basic_printable< CharT, Traits, typenamestd::decay< T >::type >::value >::type console::repr ( T && value,
std::basic_ostream< CharT, Traits > & os = std::cout )

输出可打印类型(定义了 operator<<)的表示,直接输出值。

Template Parameters
CharT流的字符类型。
Traits流的字符特征类型。
T类型条件:不是 bool,不是字符串,不是字符,不是函数指针,且 is_printable<T>::value 为 true。
Parameters
value要输出的值。
os输出流。

◆ repr() [4/5]

template<class T, class CharT = char, class Traits = std::char_traits<CharT>>
std::enable_if< std::is_same< typenamestd::decay< T >::type, bool >::value >::type console::repr ( T && value,
std::basic_ostream< CharT, Traits > & os = std::cout )

输出布尔值的表示("true" 或 "false")。

Template Parameters
CharT流的字符类型。
Traits流的字符特征类型。
T必须是 bool 类型。
Parameters
value布尔值。
os输出流。

◆ repr() [5/5]

template<class T, class CharT = char, class Traits = std::char_traits<CharT>>
std::enable_if< is_char< typenamestd::decay< T >::type >::value >::type console::repr ( T && value,
std::basic_ostream< CharT, Traits > & os = std::cout )

输出字符类型的表示,带单引号。

Template Parameters
CharT流的字符类型。
Traits流的字符特征类型。
T字符类型(由 enable_if_char 约束)。
Parameters
value要输出的字符。
os输出流,默认为 std::cout。

◆ reset()

void console::reset ( )
inlinenoexcept

重置终端所有属性(颜色、样式、光标等)到默认状态。

◆ restore_cursor()

void console::restore_cursor ( )
inlinenoexcept

恢复之前保存的光标位置。

◆ restore_screen()

void console::restore_screen ( )
inlinenoexcept

恢复屏幕内容。

◆ save_cursor()

void console::save_cursor ( )
inlinenoexcept

保存当前光标位置。

◆ save_screen()

void console::save_screen ( )
inlinenoexcept

保存屏幕内容。

◆ seconds()

Time console::seconds ( double n)
inline

静态函数,构造秒。

Parameters
n秒数。
Returns
Time 构造而来的秒。

◆ show_cursor()

void console::show_cursor ( )
inlinenoexcept

显示光标(恢复默认)。

◆ sleep()

void console::sleep ( const Time & tr)
inline

休眠指定时间。

Parameters
tr要休眠的时长。

◆ sum()

template<class T, size_t... Dims>
T console::sum ( const MultiArray< T, Dims... > & a)

求和所有元素。

Template Parameters
T元素类型。
Dims维度。
Parameters
a输入数组。
Returns
T 和。

◆ syscmd()

CmdResult console::syscmd ( const std::string & exe,
const std::vector< std::string > & args = {},
const std::map< std::string, std::string > & kwargs = {} )
inline

执行系统命令并捕获输出。

友元声明,仅允许 syscmd 创建实例。

Parameters
exe可执行文件路径或命令名。
args命令行参数列表。
kwargs关键字参数字典(格式:key value)。
Returns
CmdResult 包含执行结果的对象。

自动合并 stderr 到 stdout,使用 256 字节缓冲区读取输出。

auto result = syscmd("ls", {"-la", "/tmp"}, {});
if (result.ok()) {
std::cout << result.output();
}
CmdResult syscmd(const std::string &exe, const std::vector< std::string > &args={}, const std::map< std::string, std::string > &kwargs={})
执行系统命令并捕获输出。
Definition syscmd.h:123
Warning
函数阻塞直到命令执行完毕。

◆ timer()

template<class F, class... Args>
Time console::timer ( F && f,
Args &&... args )
inline

测量函数调用的执行时间。

Template Parameters
F可调用对象类型。
Args参数类型包。
Parameters
f要执行的函数。
args传递给函数的参数。
Returns
Time 函数执行所花费的时间。

◆ version()

std::string console::version ( )
inline

返回库的版本字符串。

Returns
std::string 格式为 console version Major.Minor.Patch (YYYY-MM-DD) – "Commit Message"。

◆ w_input()

template<class T = std::string>
T console::w_input ( const wchar_t * prompt = L"",
const WInputSettings & is = w_input_settings )

读取一行宽字符字符串。

Parameters
prompt提示信息。
is输入设置。
Returns
T 读取的值。
Note
本质上是语法糖。

◆ zip() [1/4]

template<class C1, class C2>
IteratorPair< TiedIterators< typename C1::iterator, typename C2::iterator > > console::zip ( C1 & c1,
C2 & c2 )

将两个容器“拉链”式地绑定在一起,以便同时迭代。

返回一个 IteratorPair,其中包含一个特殊的 TiedIterators 迭代器对。 当使用范围 for 循环遍历时,每次迭代将同时从两个容器中各取出一个元素, 并以 std::pair 的形式返回。 循环会在较短的容器遍历完毕后自动结束。

Template Parameters
C1第一个容器的类型(自动推导)。
C2第二个容器的类型(自动推导)。
Parameters
c1第一个容器(左值,非常量)。
c2第二个容器(左值,非常量)。
Returns
IteratorPair<TiedIterators<C1::iterator, C2::iterator>> 一个可用于范围 for 循环的迭代器对。
Note
等效操作类似 Python 的 zip 函数。
Warning
返回的迭代器对中存储的是原始容器的引用,请确保容器的生命周期长于迭代器的使用。

◆ zip() [2/4]

template<class C1, class C2>
IteratorPair< TiedIterators< typename C1::iterator, typename C2::const_iterator > > console::zip ( C1 & c1,
const C2 & c2 )

针对第一个容器为非常量、第二个容器为常量的 zip 版本。

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Parameters
c1第一个非常量容器。
c2第二个常量容器。

◆ zip() [3/4]

template<class C1, class C2>
IteratorPair< TiedIterators< typename C1::const_iterator, typename C2::iterator > > console::zip ( const C1 & c1,
C2 & c2 )

针对第一个容器为常量、第二个容器为非常量的 zip 版本。

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Parameters
c1第一个常量容器。
c2第二个非常量容器。

◆ zip() [4/4]

template<class C1, class C2>
IteratorPair< TiedIterators< typename C1::const_iterator, typename C2::const_iterator > > console::zip ( const C1 & c1,
const C2 & c2 )

针对两个常量容器的 zip 版本。

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Parameters
c1第一个常量容器。
c2第二个常量容器。

Variable Documentation

◆ ignore

ignore_t console::ignore
staticconstexpr

全局 ignore 实例,可用于忽略任意参数。

◆ input_settings

BasicInputSettings console::input_settings
static
Initial value:
{
std::cout, std::cin}

全局默认输入设置

◆ logger

BasicLogging& console::logger = get_logger()
static

全局默认 logger 实例,启用颜色,级别 INFO。

◆ meta

char console::meta[] = "CONSOLE-LIB-2026-09-06-MRXIE1109"
staticconstexpr

本库的元数据,用于标识库的版本和作者 (顺便充当二进制水印)。

◆ nothing

nothing_t console::nothing
staticconstexpr

◆ pi

char console::pi[]
staticconstexpr
Initial value:
= "3."
"14159265358979323846264338327950288419716939937510582097494459230781"
"64062862089986280348253421170679821480865132823066470938446095505822"
"31725359408128481117450284102701938521105559644622948954930381964428"
"81097566593344612847564823378678316527120190914564856692346034861045"
"43266482133936072602491412737245870066063155881748815209209628292540"
"91715364367892590360011330530548820466521384146951941511609433057270"
"36575959195309218611738193261179310511854807446237996274956735188575"
"27248912279381830119491298336733624406566430860213949463952247371907"
"02179860943702770539217176293176752384674818467669405132000568127145"
"26356082778577134275778960917363717872146844090122495343014654958537"
"10507922796892589235420199561121290219608640344181598136297747713099"
"60518707211349999998372978049951059731732816096318595024459455346908"
"30264252230825334468503526193118817101000313783875288658753320838142"
"06171776691473035982534904287554687311595628638823537875937519577818"
"577805321712268066130019278766111959092164201989"

字符串形式的 PI,精度位小数点后 1000 位,含 "3." 和 "\0" 共计 1003。

◆ print

BasicOutput& console::print = get_print()
static

全局输出对象,模仿 Python 的 print 函数。

◆ supports_ansi

const bool& console::supports_ansi = false
static

可能佯败

◆ w_input_settings

BasicInputSettings<wchar_t> console::w_input_settings
static
Initial value:
{
std::wcout, std::wcin}

全局默认宽字符输入设置

◆ wprint

BasicOutput<wchar_t>& console::wprint = get_wprint()
static

全局宽字符输出。