我有一个类,其数据容器由一个数组支持,我对begin()
和end()
有以下实现。STL算法的begin()和end()
template <size_t size>
double * MyContainerClass<size>::begin(){
return std::begin(mContainer);
}
template <size_t size>
double * MyContainerClass<size>::end(){
return std::end(mContainer);
}
在其它成员函数,我试图使用begin()
和end()
为STL算法如std::transform
和std::copy
。当const
对象作为参数传递给这些成员函数过去了,我遇到的错误:
error: passing '
const MyContainerClass<size>
' as 'this
' argument discards qualifiers.
note: in call to 'double* MyContainerClass<size>::begin()
[withunsigned int size = size
]'
这是不正确引起的begin()
和end()
实现?
std::copy(begin(), end(), someOutputIterator);
我是否需要提供const和非const实现以完全符合STL算法,还是依赖于我的类的应用程序? – Skipher
是的,你应该一般都提供。 – CompuChip
@Skipher如果要允许通过迭代器修改容器中的数据,则只需要非const版本。 – juanchopanza