Страницы

Поиск по вопросам

воскресенье, 2 февраля 2020 г.

Найти все элементы массива, между двумя заданными значениями

#cpp


Код я не буду сбрасывать, так как его нет, есть только та часть, которая не поможет
понять саму суть программы, но попробую объяснить на примере.

Допустим, у меня есть последовательность точек {112, 1, 30, 69, 3, 29, 74, 23, 12}
и моей начальной точкой является 30, в то время как конечной является точка 23. Что
мне нужно сделать, чтобы я рассматривал лишь точки {30, 69, 3, 29, 74, 23} и вывел
на экран, что именно эти точки находятся между начальной и конечной точками.

Код внизу, это как мысль, которая была у меня, но я не могу докончить, так как если
я начинаю с 30, как дальше сделать так, чтобы она взяла именно 69. Дистанцию не могу
использовать, так как дистанция между 1 и 30 меньше чем дистанция между 30 и 69. Но
я верю, что есть какая-то логика или как-то это возможно построить. Возможно моя начальная
логика построена неправильно, я буду рад изменениям.

while(current!=end)
{
  for(points= theVectorOfPoint.begin();points!=theVectorOfPointe.end();points++)
   {

   }
}

    


Ответы

Ответ 1



Вот мой вариант. /* Отвечает за номер точки */ current = 0; /* Note: Для 30 можно отдельную переменную завести и для 23 */ /* В цикле находим номер точки, равной 30 */ while (points[current] != 30) { current++; } /* И выводим все точки с 30 по 23, найдя которую выходим из цикла */ while (current < end) { cout << points[current] << " "; if (points[current] == 23) { break; } current++; }

Ответ 2



Вот немного stl-style. Правда используются возможности C++11, но можно легко обойтись без них #include #include #include #include int main(){ std::vector v = {112, 1, 30, 69, 3, 29, 74, 23, 12}; std::vector::const_iterator first = std::find(v.cbegin(), v.cend(), 30); std::vector::const_iterator last = std::find(first, v.cend(), 23) + 1; std::copy(first, last, std::ostream_iterator(std::cout, " ")); }

Комментариев нет:

Отправить комментарий