Я пытался переписать некоторый код 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())
может быть написано на C # с использованием LinQ:
nbrs.FirstOrDefault(i => i == ti.m_hexA) == null
или же
!nbrs.Any(i => i == ti.m_hexA)
где ((*ti)->m_hexA)
эквивалентно ti.m_hexA
,
Других решений пока нет …