C++11 中有 STL 容器和 C 数组的函数模板。见std::begin()
和std::end()
。不幸的是,没有等效的std::cbegin()
或std::cend()
出于某种原因。
你可以使用这些函数来做你想做的事:
template<class T, size_t N>
T const * cbegin(T(&a)[N])
{
return &a[0];
}
template<class T, size_t N>
T const * cend(T(&a)[N])
{
return &a[N];
}
template<class T>
typename T::const_iterator cbegin(T const & container)
{
return container.cbegin();
}
template<class T>
typename T::const_iterator cend(T const & container)
{
return container.cend();
}
最后两个也可以声明为:
template<class T>
auto cbegin(T const & container) -> decltype(container.cbegin())
{
return container.cbegin();
}
template<class T>
auto cend(T const & container) -> decltype(container.cend())
{
return container.cend();
}
从那里你可以这样做:
char x[] = "ab";
auto b = cbegin(x);
auto e = cend(x);