@mgkirs

КАК в D или d C++ проверить наличие элемента array[3][4] ?

КАК в D или d C++ проверить наличие элемента в массиве byte[int][int] ?
А то вылезает Range error
  • Вопрос задан
  • 5844 просмотра
Решения вопроса 1
Rio
@Rio
Смотря что значит "наличие элемента в массиве". Если массив статический, то элемент там всегда наличествует. А если динамический, то в D можно проверить что такие индексы существуют, вот так например:

auto array = new int[10][20];

/* ... */

writeln(array.length);  // напишет 20
writeln(array[0].length); // напишет 10

// проверим, что есть элемент [3][4]
if ((array.length < 4) || (array[0].length < 3))
	writeln("fail"); // а вот это не напишет, значит элемент [3][4] доступен.


Ещё можно явно отлавливать исключение, когда читается несуществующий элемент:
auto array = new int[10][20];

/* ... */

bool isElementExist(int[10][] a, size_t indexA, size_t indexB)
{
	try { auto i = a[indexA][indexB]; }
	catch { return false; }
	return true;
}

/* ... */

writeln(isElementExist(array, 300, 4)); // false
writeln(isElementExist(array, 3, 4)); // true
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AxisPod
@AxisPod
В D без понятия, в C++ никак в принципе. Только если использовать контейнеры.

Да и если уж C и C++ разные языки программирования, то D вообще ничего общего с ними не имеет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы