C# 等效于 C++ std::<int>vector.end()



我试图为我的六边形球体项目重写我在互联网上用 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 是一个结构体。

整个结构:

(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

最新更新