C#等价的C ++ std :: vector <int> .end()

时间:2017-07-06 03:53:58

标签: c# c++ language-construct

我试图在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是结构。

1 个答案:

答案 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)