如何为数组支持的模板类定义 begin() 和 end()
How to define begin() and end() for a template class backed by an array?
我有一个包含一维双数组的类,我希望为迭代器提供begin((和end((方法,而无需编写额外的类。但是,我不确定 begin(( 和 end(( 的返回类型是什么。我的直觉告诉我,我可以简单地返回一种双 * 类型,因为它是双数组的地址,但我是否必须通过 std::itrator 实现它才能符合 STL?
template <size_t size>
double * ContainerClass<size>::end(){
return std::end(mContainer);
}
使用 std::array<double, size>
,而不是重新发明轮子或在内部存储数据。
如果你真的想编写自己的std::array
版本,请保留一个指向静态分配数组的内部数据指针,使iterator
类型为T*
,并分别begin()
和end()
返回指向private
成员数组的第一个元素和末尾的指针。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在命名空间中定义函数还是限定函数
- 此代码是否违反一个定义规则
- 编译C++时未定义的引用
- 不同翻译单元中不可重载的非内联函数定义
- 为constchar*定义std::begin合法吗
- 递减 std::vector::begin 是否未定义,即使它从未被使用过?
- std::begin-类型特征中未考虑用户定义的重载
- 如何为数组支持的模板类定义 begin() 和 end()
- --begin(container) - 被定义为行为更重