我试图在C#中为我的六边形项目重写我在互联网上找到的一些C ++代码,但我遇到了以下代码:
if((((*ti)->m_hexA) != tileNdx) && (find(nbrs. begin(), nbrs.end(), ((*ti)->m_hexA)) == nbrs.end()))
{
nbrs.push_back(((*ti)->m_hexA));
}
我主要将其转换为C#。我甚至构建了自己的Find<T>(List<T> list, T value)
方法,它实现了与std :: find。
但我仍然不确定std::vector<T>::end()
的文档。文档说它返回一个迭代器,指向一个&#34;占位符&#34;迭代器末尾的槽,试图访问它将导致&#34;未定义的行为&#34;。这是:
1。)意思是在我的C#中,当处理与end()
元素进行比较的常规对象时,我应该将对象与null
进行比较?
2。)对于整数和其他原语,我应该只比较一个哨兵值,如-1?
在上面的c ++源代码中,nbrs是std :: vector,m_hexA是int,ti是结构。
答案 0 :(得分:1)
整个建筑:
ls -la
可以使用LinQ用C#编写:
(find(nbrs. begin(), nbrs.end(), ((*ti)->m_hexA)) == nbrs.end())
或
nbrs.FirstOrDefault(i => i == ti.m_hexA) == null
其中!nbrs.Any(i => i == ti.m_hexA)
相当于((*ti)->m_hexA)
。