DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK > 模板类 参考

通用索引容器模板类,为底层容器提供循环索引功能 更多...

#include <DAGenericIndexedContainer.hpp>

Public 类型

enum class  IndexPolicy { AutoReset , PreserveRaw , ForceReset }
 容器替换时的索引调整策略 更多...
 
using value_type = typename Container::value_type
 容器元素类型
 
using reference = typename Container::reference
 元素引用类型
 
using const_reference = typename Container::const_reference
 常量元素引用类型
 
using size_type = typename Container::size_type
 容器大小类型
 
迭代器支持
using iterator = typename Container::iterator
 非常量迭代器类型
 
using const_iterator = typename Container::const_iterator
 常量迭代器类型
 
using reverse_iterator = typename Container::reverse_iterator
 反向迭代器类型
 
using const_reverse_iterator = typename Container::const_reverse_iterator
 常量反向迭代器类型
 

Public 成员函数

const Container & container () const
 
构造与初始化
 DAGenericIndexedContainer ()=default
 默认构造空容器
 
template<typename... Args>
 DAGenericIndexedContainer (Args &&... args)
 完美转发构造底层容器
 
 DAGenericIndexedContainer (std::initializer_list< value_type > init)
 初始化列表构造
 
索引导航
value_type next ()
 移动后获取下一个元素
 
void moveToNext ()
 移动到下一个位置(循环)
 
value_type previous ()
 移动后获取上一个元素
 
void moveToPrevious ()
 移动到上一个位置(循环)
 
reference current ()
 获取当前元素(非常量)
 
const_reference current () const
 获取当前元素(常量)
 
运算符重载
value_type operator++ ()
 前缀递增(++obj)
 
value_type operator++ (int)
 后缀递增(obj++)
 
value_type operator-- ()
 前缀递减(–obj)
 
value_type operator-- (int)
 后缀递减(obj–)
 
容器访问
bool empty () const noexcept
 检查容器是否为空
 
size_type size () const noexcept
 获取元素数量
 
void clear ()
 清空容器并重置索引
 
template<typename... Args>
void emplace_back (Args &&... args)
 向容器末尾原位构造元素
 
首尾元素访问
reference first ()
 获取首元素(非常量版本)
 
const_reference first () const
 获取首元素(常量版本)
 
reference last ()
 获取尾元素(非常量版本)
 
const_reference last () const
 获取尾元素(常量版本)
 
reference firstChecked ()
 安全获取首元素(带边界检查)
 
const_reference firstChecked () const
 安全获取首元素(常量版本)
 
reference lastChecked ()
 安全获取尾元素(带边界检查)
 
const_reference lastChecked () const
 安全获取尾元素(常量版本)
 
索引控制
IndexType currentIndex () const noexcept
 获取当前索引值
 
void setCurrentIndex (IndexType index) noexcept
 设置当前索引
 
bool isValidIndex () const noexcept
 检查当前索引是否有效
 
bool isFirstIndex () const
 检查是否是第一个索引
 
bool isLastIndex () const
 检查是否是最后一个索引
 
容器赋值操作
DAGenericIndexedContaineroperator= (const Container &other)
 拷贝赋值底层容器
 
DAGenericIndexedContaineroperator= (Container &&other) noexcept
 移动赋值底层容器
 
容器内容替换
void replace (Container newContainer, IndexPolicy policy=IndexPolicy::AutoReset)
 替换容器内容并智能调整索引
 
元素访问
reference operator[] (IndexType index)
 下标访问操作符(非const版本)
 
const_reference operator[] (IndexType index) const
 下标访问操作符(const版本)
 
安全访问
reference at (IndexType index)
 带边界检查的元素访问
 
const_reference at (IndexType index) const
 带边界检查的常量元素访问
 
迭代器操作
iterator begin () noexcept
 获取指向容器首元素的迭代器
 
iterator end () noexcept
 获取指向容器末尾的迭代器
 
const_iterator begin () const noexcept
 获取常量起始迭代器
 
const_iterator end () const noexcept
 获取常量结束迭代器
 
const_iterator cbegin () const noexcept
 获取常量起始迭代器(C++11风格)
 
const_iterator cend () const noexcept
 获取常量结束迭代器(C++11风格)
 
reverse_iterator rbegin () noexcept
 获取反向起始迭代器
 
reverse_iterator rend () noexcept
 获取反向结束迭代器
 
const_reverse_iterator crbegin () const noexcept
 获取常量反向起始迭代器
 
const_reverse_iterator crend () const noexcept
 获取常量反向结束迭代器
 

详细描述

template<typename Container, typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
class DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >

通用索引容器模板类,为底层容器提供循环索引功能

模板参数
Container底层容器类型,需满足以下接口:
  • size_type size() const 获取元素数量
  • reference operator[](size_type) 下标访问
  • const_reference operator[](size_type) const 常量下标访问
  • 支持初始化列表构造
IndexType索引值类型,用于跟踪容器位置,默认int类型
SFINAE_CHECKSFINAE约束检查,确保容器符合所需接口

本类通过组合方式包装任意标准容器,为其添加当前索引跟踪功能,支持循环遍历操作。 典型应用场景包括:循环缓冲区、轮播列表、状态机循环切换等。

特性

  • 零成本抽象:所有操作均为O(1)时间复杂度
  • 类型安全:编译期接口检查
  • 循环语义:到达边界自动回绕
  • 异常安全:不抛异常保证(nothrow)

示例1:使用std::vector

++words; // 当前索引1,值为"B"
words.moveToPrevious(); // 索引0,值"A"
通用索引容器模板类,为底层容器提供循环索引功能
Definition DAGenericIndexedContainer.hpp:57
void moveToPrevious()
移动到上一个位置(循环)
Definition DAGenericIndexedContainer.hpp:242

示例2:使用Qt容器

DAGenericIndexedContainer<QList<QColor>, quint16> colors{Qt::red, Qt::green};
colors.emplace_back(Qt::blue); // 添加颜色
auto current = colors++; // 返回Qt::red,索引前进到1
reference current()
获取当前元素(非常量)
Definition DAGenericIndexedContainer.hpp:261
void emplace_back(Args &&... args)
向容器末尾原位构造元素
Definition DAGenericIndexedContainer.hpp:393

示例3:空容器处理

assert(emptyVec.isValidIndex() == false); // 空容器索引无效
emptyVec.moveToNext(); // 无操作
bool isValidIndex() const noexcept
检查当前索引是否有效
Definition DAGenericIndexedContainer.hpp:556
void moveToNext()
移动到下一个位置(循环)
Definition DAGenericIndexedContainer.hpp:212

成员枚举类型说明

◆ IndexPolicy

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
enum class DA::DAGenericIndexedContainer::IndexPolicy
strong

容器替换时的索引调整策略

该枚举定义了在替换底层容器时,如何处理当前索引的不同策略。 用于控制容器内容更新后索引的自动调整逻辑。

参见
replace()
枚举值
AutoReset 

自动智能重置策略(默认)

  • 当新容器非空时:
    • 若原索引在[0, 新容器size())范围内,保持原索引
    • 若原索引超出范围,重置为0
  • 当新容器为空时:
    • 强制设置索引为0(此时isValidIndex()为false)

适用场景:大多数常规替换操作,在保持索引有效性的同时尽可能保留位置

// 原索引2,新容器size=5 → 保持2
// 原索引3,新容器size=2 → 重置为0
// 替换为空容器 → 索引0(无效)
cont.replace(newData, IndexPolicy::AutoReset);
@ AutoReset
自动智能重置策略(默认)
PreserveRaw 

原始索引保留策略

完全保留当前索引数值,无论是否有效。 调用者需自行检查索引有效性。

适用场景:需要精确控制索引位置的高级用法

警告
使用后必须检查isValidIndex()
// 原索引3,新容器size=1 → 保持3(无效)
cont.replace(newData, IndexPolicy::PreserveRaw);
if (!cont.isValidIndex()) {
cont.setCurrentIndex(0); // 手动修正
}
@ PreserveRaw
原始索引保留策略
ForceReset 

强制重置策略

无论原索引如何,强制设置索引为0。

  • 新容器非空时:索引0有效
  • 新容器为空时:索引0无效

适用场景:需要从容器起始位置开始操作的场景

// 任意原索引 → 强制置0
cont.replace(newData, IndexPolicy::ForceReset);
assert(cont.currentIndex() == 0);

构造及析构函数说明

◆ DAGenericIndexedContainer() [1/3]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::DAGenericIndexedContainer ( )
default

默认构造空容器

注解
初始索引为0,但空容器isValidIndex()返回false

◆ DAGenericIndexedContainer() [2/3]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
template<typename... Args>
DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::DAGenericIndexedContainer ( Args &&...  args)
inlineexplicit

完美转发构造底层容器

模板参数
Args构造参数类型
参数
args传递给底层容器的构造参数

示例:

// 构造预留10个int的vector
// 构造包含3个元素的QList

◆ DAGenericIndexedContainer() [3/3]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::DAGenericIndexedContainer ( std::initializer_list< value_type init)
inline

初始化列表构造

参数
init初始化元素列表

示例:

assert(chars.size() == 3);

成员函数说明

◆ at() [1/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
reference DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::at ( IndexType  index)
inline

带边界检查的元素访问

参数
index要访问的索引
返回
对应元素的引用
异常
std::out_of_range当 index 超出 [0, size()) 范围

示例:

try {
int val = cont.at(10);
} catch (const std::out_of_range& e) {
// 处理越界
}

◆ at() [2/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
const_reference DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::at ( IndexType  index) const
inline

带边界检查的常量元素访问

参见
at(IndexType)

◆ begin() [1/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
const_iterator DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::begin ( ) const
inlinenoexcept

获取常量起始迭代器

参见
begin()

◆ begin() [2/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
iterator DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::begin ( )
inlinenoexcept

获取指向容器首元素的迭代器

返回
起始迭代器

示例遍历所有元素:

for (auto it = cont.begin(); it != cont.end(); ++it) {
process(*it);
}

◆ clear()

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
void DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::clear ( )
inline

清空容器并重置索引

后置条件
size() == 0 && currentIndex() == 0

◆ current() [1/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
reference DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::current ( )
inline

获取当前元素(非常量)

返回
当前索引处元素的引用
前置条件
isValidIndex() == true
警告
无效索引调用导致未定义行为

示例:

auto& curr = container.current(); // 获取可修改引用
curr.setValue(42); // 修改当前元素

◆ current() [2/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
const_reference DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::current ( ) const
inline

获取当前元素(常量)

返回
当前索引处元素的常量引用
参见
current()

◆ currentIndex()

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
IndexType DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::currentIndex ( ) const
inlinenoexcept

获取当前索引值

返回
当前索引的数值
注解
返回值可能超出有效范围,需配合isValidIndex()使用

◆ emplace_back()

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
template<typename... Args>
void DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::emplace_back ( Args &&...  args)
inline

向容器末尾原位构造元素

模板参数
Args构造参数类型
参数
args元素构造参数
注解
要求底层容器实现emplace_back()

示例:

container.emplace_back(1, "test"); // 构造MyClass(1, "test")

◆ empty()

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
bool DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::empty ( ) const
inlinenoexcept

检查容器是否为空

返回
true 当且仅当size() == 0
注解
复杂度O(1)

◆ end() [1/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
const_iterator DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::end ( ) const
inlinenoexcept

获取常量结束迭代器

参见
end()

◆ end() [2/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
iterator DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::end ( )
inlinenoexcept

获取指向容器末尾的迭代器

返回
结束迭代器

◆ first() [1/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
reference DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::first ( )
inline

获取首元素(非常量版本)

返回
容器第一个元素的引用
警告
容器为空时调用将导致未定义行为
注解
等效于 operator[](0)

示例:

cont.first() = 5; // 修改第一个元素

◆ first() [2/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
const_reference DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::first ( ) const
inline

获取首元素(常量版本)

参见
first()

◆ firstChecked() [1/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
reference DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::firstChecked ( )
inline

安全获取首元素(带边界检查)

返回
容器第一个元素的引用
异常
std::out_of_range当容器为空时抛出

示例安全访问:

try {
auto& val = cont.firstChecked();
} catch (const std::out_of_range&) {
// 处理空容器
}

◆ firstChecked() [2/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
const_reference DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::firstChecked ( ) const
inline

安全获取首元素(常量版本)

参见
firstChecked()

◆ isFirstIndex()

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
bool DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::isFirstIndex ( ) const
inline

检查是否是第一个索引

返回
如果是第一个索引或容器为空返回true

◆ isLastIndex()

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
bool DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::isLastIndex ( ) const
inline

检查是否是最后一个索引

返回
如果是最后一个有效索引或容器为空返回true

◆ isValidIndex()

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
bool DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::isValidIndex ( ) const
inlinenoexcept

检查当前索引是否有效

返回
true 当 0 <= index < size()

示例:

while (container.isValidIndex()) {
process(container.current());
++container;
}

◆ last() [1/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
reference DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::last ( )
inline

获取尾元素(非常量版本)

返回
容器最后一个元素的引用
警告
容器为空时调用将导致未定义行为
注解
等效于 operator[](size()-1)

示例:

cont.last() += 10; // 修改最后一个元素

◆ last() [2/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
const_reference DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::last ( ) const
inline

获取尾元素(常量版本)

参见
last()

◆ lastChecked() [1/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
reference DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::lastChecked ( )
inline

安全获取尾元素(带边界检查)

返回
容器最后一个元素的引用
异常
std::out_of_range当容器为空时抛出

◆ lastChecked() [2/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
const_reference DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::lastChecked ( ) const
inline

安全获取尾元素(常量版本)

参见
lastChecked()

◆ moveToNext()

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
void DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::moveToNext ( )
inline

移动到下一个位置(循环)

注解
空容器调用无效果
后置条件
索引值可能回绕到0

示例:

arr.setCurrentIndex(2); // 索引2
arr.moveToNext(); // 索引0
void setCurrentIndex(IndexType index) noexcept
设置当前索引
Definition DAGenericIndexedContainer.hpp:539

◆ moveToPrevious()

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
void DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::moveToPrevious ( )
inline

移动到上一个位置(循环)

注解
空容器调用无效果
后置条件
索引值可能回绕到size()-1

示例:

vec.moveToPrevious(); // 从0回绕到1
assert(vec.current() == "Second");

◆ next()

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
value_type DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::next ( )
inline

移动后获取下一个元素

返回
新位置的元素
警告
容器为空时行为未定义

◆ operator++() [1/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
value_type DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::operator++ ( )
inline

前缀递增(++obj)

返回
递增后的容器引用
后置条件
索引前进一位(可能回绕)

示例:

auto& c = ++container; // 立即使用新值

◆ operator++() [2/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
value_type DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::operator++ ( int  )
inline

后缀递增(obj++)

返回
递增前的元素副本
后置条件
索引前进一位(可能回绕)

示例:

auto old = container++; // 保存旧值
process(old); // 处理旧值

◆ operator--() [1/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
value_type DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::operator-- ( )
inline

前缀递减(–obj)

返回
递减后的容器引用
后置条件
索引后退一位(可能回绕)

示例:

auto c = --container; // 立即使用新值

◆ operator--() [2/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
value_type DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::operator-- ( int  )
inline

后缀递减(obj–)

返回
递减前的元素副本
后置条件
索引后退一位(可能回绕)

示例:

auto old = container--; // 保存旧值
process(old); // 处理旧值

◆ operator=() [1/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
DAGenericIndexedContainer & DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::operator= ( const Container &  other)
inline

拷贝赋值底层容器

参数
other要拷贝的容器
返回
当前对象的引用
注解
赋值后会尝试保持当前索引有效性:
  • 如果原索引在新容器范围内则保留
  • 否则重置为0(若新容器非空)或保持0(空容器)
警告
若新容器为空,索引将标记为无效

示例1:缩小容器大小

DAGenericIndexedContainer<std::vector<int>> cont({1,2,3,4}); // index=0
std::vector<int> newData{5,6};
cont = newData; // 新size=2,index=0(超出原3,重置)

示例2:扩大容器大小

cont.setCurrentIndex(1);
cont = std::vector<int>{1,2,3,4,5}; // 保持index=1

◆ operator=() [2/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
DAGenericIndexedContainer & DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::operator= ( Container &&  other)
inlinenoexcept

移动赋值底层容器

参数
other要移动的容器
返回
当前对象的引用
注解
行为与拷贝赋值一致,但更高效
警告
移动后源容器other状态未定义

示例:

std::vector<int> data{1,2,3};
cont = std::move(data); // data状态未定义

◆ operator[]() [1/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
reference DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::operator[] ( IndexType  index)
inline

下标访问操作符(非const版本)

参数
index要访问的元素索引
返回
对应元素的引用
警告
不进行边界检查,调用者需确保 0 <= index < size()
注解
与当前索引无关,仅访问指定位置元素

示例:

cont[1] = 5; // 直接修改索引1处元素
assert(cont[1] == 5);
警告
以下情况导致未定义行为:
  • index < 0
  • index >= size()
  • 容器为空时访问任意索引

◆ operator[]() [2/2]

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
const_reference DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::operator[] ( IndexType  index) const
inline

下标访问操作符(const版本)

参数
index要访问的元素索引
返回
对应元素的常量引用
参见
operator[](IndexType)

◆ previous()

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
value_type DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::previous ( )
inline

移动后获取上一个元素

返回
新位置的元素
警告
容器为空时行为未定义

◆ rbegin()

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
reverse_iterator DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::rbegin ( )
inlinenoexcept

获取反向起始迭代器

示例反向遍历:

for (auto rit = cont.rbegin(); rit != cont.rend(); ++rit) {
process(*rit);
}

◆ replace()

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
void DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::replace ( Container  newContainer,
IndexPolicy  policy = IndexPolicy::AutoReset 
)
inline

替换容器内容并智能调整索引

参数
newContainer新容器
policy索引调整策略(默认为AutoReset)

策略选项:

  • AutoReset: 自动重置到0或保持有效索引(默认)
  • PreserveRaw: 保留原始索引值(可能无效)
  • ForceReset: 强制重置到0

示例:强制重置索引

cont.replace(newData, ForceReset); // 无论原索引如何,强制置0

◆ setCurrentIndex()

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
void DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::setCurrentIndex ( IndexType  index)
inlinenoexcept

设置当前索引

参数
index新的索引值
注解
不进行范围检查,设置后应调用isValidIndex()验证

示例:

container.setCurrentIndex(5);
if (container.isValidIndex()) {
// 安全操作
}

◆ size()

template<typename Container , typename IndexType = int, typename SFINAE_CHECK = std::void_t< typename Container::size_type, typename Container::value_type, decltype(std::declval< Container >()[ std::declval< typename Container::size_type >() ]) >>
size_type DA::DAGenericIndexedContainer< Container, IndexType, SFINAE_CHECK >::size ( ) const
inlinenoexcept

获取元素数量

返回
容器当前存储的元素数量

该类的文档由以下文件生成: