我创建了一个包含3个相同类型元素的类(类似于std::pair<T,std::pair<T,T>>).此外,我准备使用for(auto&var:t)
但我不知道我是否安全地做到了.
template <class T>
class Troika
{
public:
Troika(const T& f, const T& s, const T& t)
:first(f), second(s), third(t) {}
Troika(){}
T first;
T second;
T third;
typedef T* iterator;
typedef const T* const_iterator;
iterator begin()
{
return &first;
}
const_iterator begin() const
{
return &first;
}
iterator end()
{
return &third+1;
}
const_iterator end() const
{
return &third + 1;
}
};
Run Code Online (Sandbox Code Playgroud)
我的意思是这个部分:return &third + 1;.我知道如果有人对c ++中的指针算法知之甚少,那真的很危险.这些元素是否一个接一个地靠近?
Sto*_*ica 10
这些元素是否一个接一个地靠近?
它们可能是,因为它们具有完全相同的可访问性.但它仍然无法使您的实施安全.指针算法仅对同一数组对象中的元素有效.这三个不在同一个数组中,看不到阵列.任何使用这些迭代器的尝试都将导致未定义的行为.
我不确定你是否打算定义这个类,但是对于同一类型的三个元素的容器,我会提供更多的惯用语:
template<typename T>
using Troika = std::array<T, 3>;
Run Code Online (Sandbox Code Playgroud)
你失去了first,second并third命名为成员,但获得索引(这是很好的,我认为)和迭代是免费的.