C # эквивалент C ++ std :: vector & lt; int & gt; .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 — это структура.

2

Решение

Вся конструкция:

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

может быть написано на C # с использованием LinQ:

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

или же

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

где ((*ti)->m_hexA) эквивалентно ti.m_hexA,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]