2

我试图用 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()。文档说它返回一个指向迭代器末尾的“占位符”插槽的迭代器,并且尝试访问它将导致“未定义的行为”。做这个:

1.) 意味着在我的 C# 中,当处理与end()元素进行比较的常规对象时,我应该将对象与null

2.) 对于整数和其他原语,我应该只与 -1 之类的标记值进行比较吗?

在上面的c++源代码中,nbrs是一个std::vector,m_hexA是一个int,ti是一个struct。

4

1 回答 1

1

整体施工:

(find(nbrs. begin(), nbrs.end(), ((*ti)->m_hexA)) == nbrs.end())

可以使用 LinQ 用 C# 编写:

nbrs.FirstOrDefault(i => i == ti.m_hexA) == null

或者

!nbrs.Any(i => i == ti.m_hexA)

((*ti)->m_hexA)相当于ti.m_hexA. _

于 2017-07-06T05:25:27.673 回答